diff --git a/examples/SDL3-simple-demo/CMakeLists.txt b/examples/SDL3-simple-demo/CMakeLists.txt index 794f89f..f5f2184 100644 --- a/examples/SDL3-simple-demo/CMakeLists.txt +++ b/examples/SDL3-simple-demo/CMakeLists.txt @@ -14,7 +14,7 @@ set(FETCHCONTENT_QUIET FALSE) FetchContent_Declare( SDL GIT_REPOSITORY https://github.com/libsdl-org/SDL.git - GIT_TAG preview-3.1.6 + GIT_TAG release-3.2.4 GIT_SHALLOW TRUE GIT_PROGRESS TRUE ) @@ -38,7 +38,7 @@ set_property(DIRECTORY "${sdl_ttf_SOURCE_DIR}" PROPERTY EXCLUDE_FROM_ALL TRUE) FetchContent_Declare( SDL_image GIT_REPOSITORY "https://github.com/libsdl-org/SDL_image.git" - GIT_TAG main # Slightly risky to use main branch, but it's the only one available + GIT_TAG release-3.2.0 # Slightly risky to use main branch, but it's the only one available GIT_SHALLOW TRUE GIT_PROGRESS TRUE ) diff --git a/renderers/SDL3/clay_renderer_SDL3.c b/renderers/SDL3/clay_renderer_SDL3.c index f033956..07ffc51 100644 --- a/renderers/SDL3/clay_renderer_SDL3.c +++ b/renderers/SDL3/clay_renderer_SDL3.c @@ -141,12 +141,14 @@ static void SDL_Clay_RenderArc(Clay_SDL3RendererData *rendererData, const SDL_FP } } +SDL_Rect currentClippingRectangle; + static void SDL_Clay_RenderClayCommands(Clay_SDL3RendererData *rendererData, Clay_RenderCommandArray *rcommands) { for (size_t i = 0; i < rcommands->length; i++) { Clay_RenderCommand *rcmd = Clay_RenderCommandArray_Get(rcommands, i); const Clay_BoundingBox bounding_box = rcmd->boundingBox; - const SDL_FRect rect = { bounding_box.x, bounding_box.y, bounding_box.width, bounding_box.height }; + const SDL_FRect rect = { (int)bounding_box.x, (int)bounding_box.y, (int)bounding_box.width, (int)bounding_box.height }; switch (rcmd->commandType) { case CLAY_RENDER_COMMAND_TYPE_RECTANGLE: { @@ -232,12 +234,28 @@ static void SDL_Clay_RenderClayCommands(Clay_SDL3RendererData *rendererData, Cla } } break; + case CLAY_RENDER_COMMAND_TYPE_SCISSOR_START: { + Clay_BoundingBox boundingBox = rcmd->boundingBox; + currentClippingRectangle = (SDL_Rect) { + .x = boundingBox.x, + .y = boundingBox.y, + .w = boundingBox.width, + .h = boundingBox.height, + }; + SDL_SetRenderClipRect(rendererData->renderer, ¤tClippingRectangle); + break; + } + case CLAY_RENDER_COMMAND_TYPE_SCISSOR_END: { + SDL_SetRenderClipRect(rendererData->renderer, NULL); + break; + } case CLAY_RENDER_COMMAND_TYPE_IMAGE: { - const SDL_Surface *image = (SDL_Surface *)rcmd->config.imageElementConfig->imageData; - const SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, image); + SDL_Surface *image = (SDL_Surface *)rcmd->renderData.image.imageData; + SDL_Texture *texture = SDL_CreateTextureFromSurface(rendererData->renderer, image); const SDL_FRect dest = { rect.x, rect.y, rect.w, rect.h }; - SDL_RenderTexture(renderer, texture, NULL, &dest); + SDL_RenderTexture(rendererData->renderer, texture, NULL, &dest); + SDL_DestroyTexture(texture); break; } default: