Compare commits

...

7 Commits

Author SHA1 Message Date
tomat
ff3c4c54cb
Merge d0d1e01a3f into 3961720ef0 2025-02-11 10:24:57 +00:00
Nic Barker
3961720ef0 [Core & Documentation] Cleanup public / private API and internal document public API via comments
Some checks are pending
CMake on multiple platforms / build (Release, cl, cl, windows-latest) (push) Waiting to run
CMake on multiple platforms / build (Release, clang, clang++, ubuntu-latest) (push) Waiting to run
CMake on multiple platforms / build (Release, gcc, g++, ubuntu-latest) (push) Waiting to run
2025-02-11 17:11:03 +13:00
Nic Barker
dd1f018444 [Documentation] Add inline documentation comments for subfields of Clay_ElementDeclaration 2025-02-11 14:14:55 +13:00
Stephen T
d0d1e01a3f
Remove README for SDL3 renderer since it's no longer needed. 2025-02-06 19:51:41 -06:00
Stephen T
23ee491e37
Merge branch 'main' of https://github.com/steviegt6/clay into feature/sdl3-image-rendering
Fix merge issues on feature/sdl3-image-rendering branch.
Add support for scissor handling.
2025-02-06 19:51:17 -06:00
Stephen T
ccb57787ce
Remove image rendering from missing features of SDL3. 2025-01-31 03:02:52 -06:00
Stephen T
25e13b8bdb
Implement SDL3 image rendering with SDL_image. 2025-01-31 03:02:33 -06:00
12 changed files with 490 additions and 166 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

609
clay.h

File diff suppressed because it is too large Load Diff

View File

@ -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(

View File

@ -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 *font = gFonts[config->fontId];
@ -68,6 +70,8 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
gFonts[FONT_ID] = font;
sample_image = IMG_Load("resources/sample.png");
/* Initialize Clay */
uint64_t totalMemorySize = Clay_MinMemorySize();
Clay_Arena clayMemory = (Clay_Arena) {

Binary file not shown.

After

Width:  |  Height:  |  Size: 850 B

View File

@ -1,4 +0,0 @@
Please note, the SDL3 renderer is not 100% feature complete. It is currently missing:
- Images
- Scroll / Scissor handling

View File

@ -2,6 +2,7 @@
#include <SDL3/SDL_main.h>
#include <SDL3/SDL.h>
#include <SDL3_ttf/SDL_ttf.h>
#include <SDL3_image/SDL_image.h>
/* This needs to be global because the "MeasureText" callback doesn't have a
* user data parameter */
@ -137,6 +138,8 @@ static void SDL_RenderArc(SDL_Renderer *renderer, const SDL_FPoint center, const
}
}
SDL_Rect currentClippingRectangle;
static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArray *rcommands)
{
for (size_t i = 0; i < rcommands->length; i++) {
@ -232,6 +235,29 @@ static void SDL_RenderClayCommands(SDL_Renderer *renderer, Clay_RenderCommandArr
}
} 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(renderer, &currentClippingRectangle);
break;
}
case CLAY_RENDER_COMMAND_TYPE_SCISSOR_END: {
SDL_SetRenderClipRect(renderer, NULL);
break;
}
case CLAY_RENDER_COMMAND_TYPE_IMAGE: {
Clay_ImageRenderData *config = &rcmd->renderData.image;
const SDL_Texture *texture = SDL_CreateTextureFromSurface(renderer, config->imageData);
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);
}