diff --git a/examples/SDL3-simple-demo/CMakeLists.txt b/examples/SDL3-simple-demo/CMakeLists.txt index df467a9..794f89f 100644 --- a/examples/SDL3-simple-demo/CMakeLists.txt +++ b/examples/SDL3-simple-demo/CMakeLists.txt @@ -34,11 +34,24 @@ message(STATUS "Using SDL_ttf via FetchContent") FetchContent_MakeAvailable(SDL_ttf) set_property(DIRECTORY "${sdl_ttf_SOURCE_DIR}" PROPERTY EXCLUDE_FROM_ALL TRUE) +# Download SDL_image +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_SHALLOW TRUE + GIT_PROGRESS TRUE +) +message(STATUS "Using SDL_image via FetchContent") +FetchContent_MakeAvailable(SDL_image) +set_property(DIRECTORY "${SDL_image_SOURCE_DIR}" PROPERTY EXCLUDE_FROM_ALL TRUE) + # Example executable add_executable(${PROJECT_NAME} main.c) target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3 SDL3_ttf::SDL3_ttf + SDL3_image::SDL3_image ) add_custom_command( diff --git a/examples/SDL3-simple-demo/main.c b/examples/SDL3-simple-demo/main.c index 0597ab5..e632b20 100644 --- a/examples/SDL3-simple-demo/main.c +++ b/examples/SDL3-simple-demo/main.c @@ -23,6 +23,8 @@ typedef struct app_state { ClayVideoDemo_Data demoData; } AppState; +SDL_Surface *sample_image; + static inline Clay_Dimensions SDL_MeasureText(Clay_StringSlice text, Clay_TextElementConfig *config, void *userData) { TTF_Font **fonts = userData; @@ -81,6 +83,8 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) state->rendererData.fonts[FONT_ID] = font; + sample_image = IMG_Load("resources/sample.png"); + /* Initialize Clay */ uint64_t totalMemorySize = Clay_MinMemorySize(); Clay_Arena clayMemory = (Clay_Arena) { diff --git a/examples/SDL3-simple-demo/resources/sample.png b/examples/SDL3-simple-demo/resources/sample.png new file mode 100644 index 0000000..2c00828 Binary files /dev/null and b/examples/SDL3-simple-demo/resources/sample.png differ diff --git a/renderers/SDL3/clay_renderer_SDL3.c b/renderers/SDL3/clay_renderer_SDL3.c index a5386cc..f033956 100644 --- a/renderers/SDL3/clay_renderer_SDL3.c +++ b/renderers/SDL3/clay_renderer_SDL3.c @@ -2,6 +2,7 @@ #include #include #include +#include typedef struct { SDL_Renderer *renderer; @@ -231,6 +232,14 @@ static void SDL_Clay_RenderClayCommands(Clay_SDL3RendererData *rendererData, Cla } } 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); + const SDL_FRect dest = { rect.x, rect.y, rect.w, rect.h }; + + SDL_RenderTexture(renderer, texture, NULL, &dest); + break; + } default: SDL_Log("Unknown render command type: %d", rcmd->commandType); }