Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions src/src/sdl3.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ static int SAC_EventHandler(void *data)
exit(0);
}

SDLcontext *SAC_InitDisplay(int height, int width)
SDLcontext *SAC_InitDisplay(sac_int height, sac_int width)
{
SDLcontext *ctx = (SDLcontext *)malloc(sizeof(SDLcontext));
ctx->width = width;
Expand All @@ -73,11 +73,11 @@ SDLcontext *SAC_InitDisplay(int height, int width)
SAC_RuntimeError("SDL_Init failed: %s", SDL_GetError());
}

if(!SDL_CreateWindowAndRenderer("SaC SDL3", width, height, 0, &ctx->window, &ctx->renderer)) {
if(!SDL_CreateWindowAndRenderer("SaC SDL3", (int)width, (int)height, 0, &ctx->window, &ctx->renderer)) {
SAC_RuntimeError("SDL_CreateWindowAndRenderer failed: %s", SDL_GetError());
}

ctx->texture = SDL_CreateTexture(ctx->renderer, SDL_PIXELFORMAT_RGB24, SDL_TEXTUREACCESS_STREAMING, width, height);
ctx->texture = SDL_CreateTexture(ctx->renderer, SDL_PIXELFORMAT_RGB24, SDL_TEXTUREACCESS_STREAMING, (int)width, (int)height);
if(ctx->texture == NULL) {
SAC_RuntimeError("SDL_CreateTexture failed: %s", SDL_GetError());
}
Expand All @@ -102,26 +102,26 @@ SDLcontext *SAC_InitDisplay(int height, int width)
return ctx;
}

void SAC_DrawPixelsOffset(SDLcontext *ctx, SACarg *sacPixels, int xOffset, int yOffset)
void SAC_DrawPixelsOffset(SDLcontext *ctx, SACarg *sacPixels, sac_int xOffset, sac_int yOffset)
{
assert(SACARGgetDim(sacPixels) == 3);
assert(SACARGgetShape(sacPixels, 2) == 3);

const int srcHeight = SACARGgetShape(sacPixels, 0);
const int srcWidth = SACARGgetShape(sacPixels, 1);
const int *srcPixels = SACARGgetSharedData(SACTYPE__MAIN__int, sacPixels);
const sac_int srcHeight = (sac_int)SACARGgetShape(sacPixels, 0);
const sac_int srcWidth = (sac_int)SACARGgetShape(sacPixels, 1);
const sac_int *srcPixels = SACARGgetSharedData(SACTYPE__MAIN__int, sacPixels);

uint8_t *dstPixels;
int pitch;
if (!SDL_LockTexture(ctx->texture, NULL, (void **)&dstPixels, &pitch)) {
SAC_RuntimeError("SDL_LockTexture failed: %s", SDL_GetError());
}

for (size_t y = 0; y < MIN(srcHeight, ctx->height - yOffset); y++) {
const int *srcRow = srcPixels + y * srcWidth * 3;
uint8_t *dstRow = dstPixels + (yOffset + y) * pitch;
for (sac_int y = 0; y < MIN(srcHeight, (sac_int)ctx->height - yOffset); y++) {
const sac_int *srcRow = srcPixels + y * srcWidth * 3;
uint8_t *dstRow = dstPixels + (yOffset + y) * (sac_int)pitch;

for (size_t x = 0; x < 3 * MIN(srcWidth, ctx->width - xOffset); x += 3) {
for (sac_int x = 0; x < 3 * MIN(srcWidth, (sac_int)ctx->width - xOffset); x += 3) {
dstRow[xOffset + x + 0] = (uint8_t)(srcRow[x + 0]);
dstRow[xOffset + x + 1] = (uint8_t)(srcRow[x + 1]);
dstRow[xOffset + x + 2] = (uint8_t)(srcRow[x + 2]);
Expand All @@ -144,7 +144,7 @@ SACarg *SAC_GetSelection(SDLcontext *ctx)
SDL_WaitSemaphore(ctx->selection.isSelecting);
assert(ctx->selection.mode == SEL_none);

int *res = malloc(4 * sizeof(int));
sac_int *res = malloc(4 * sizeof(sac_int));
// Ensure coordinates are [topleft, bottomright] and each of the form [y,x]
if (ctx->selection.coords[0] <= ctx->selection.coords[2]) {
res[1] = ctx->selection.coords[0];
Expand All @@ -164,7 +164,7 @@ SACarg *SAC_GetSelection(SDLcontext *ctx)
return SACARGcreateFromPointer(SACTYPE__MAIN__int, (void *)res, 2, 2, 2);
}

int SAC_CloseDisplay(SDLcontext *ctx)
sac_int SAC_CloseDisplay(SDLcontext *ctx)
{
if (ctx->running) {
SDL_Event quitEvent;
Expand All @@ -174,11 +174,11 @@ int SAC_CloseDisplay(SDLcontext *ctx)
}
}

int exitStatus;
SDL_WaitThread(ctx->eventHandler, &exitStatus);
int status;
SDL_WaitThread(ctx->eventHandler, &status);
SDL_Quit();

return exitStatus;
return (sac_int)status;
}

bool SAC_IsRunning(SDLcontext *ctx)
Expand Down
8 changes: 4 additions & 4 deletions src/src/sdl3.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ typedef enum {
typedef struct SDLselection {
SDL_Semaphore *isSelecting;
selmode_t mode;
int coords[4];
sac_int coords[4];
} SDLselection;

typedef struct SDLcontext {
Expand All @@ -29,11 +29,11 @@ typedef struct SDLcontext {
SDLselection selection;
} SDLcontext;

extern SDLcontext *SAC_InitDisplay(int height, int width);
extern void SAC_DrawPixelsOffset(SDLcontext *ctx, SACarg *sacPixels, int xOffset, int yOffset);
extern SDLcontext *SAC_InitDisplay(sac_int height, sac_int width);
extern void SAC_DrawPixelsOffset(SDLcontext *ctx, SACarg *sacPixels, sac_int xOffset, sac_int yOffset);
extern void SAC_DrawPixels(SDLcontext *ctx, SACarg *sacPixels);
extern SACarg *SAC_GetSelection(SDLcontext *ctx);
extern int SAC_CloseDisplay(SDLcontext *ctx);
extern sac_int SAC_CloseDisplay(SDLcontext *ctx);
extern bool SAC_IsRunning(SDLcontext *ctx);

#endif /* _SACSDL3_H_ */
Loading