Render textg

This commit is contained in:
2025-08-11 23:06:48 -05:00
parent e9d2f4904a
commit 294abab501
8 changed files with 282 additions and 30 deletions

View File

@@ -6,30 +6,89 @@
*/
#include "renderbackbuffer.h"
#include "render.h"
#if RENDER_USE_FRAMEBUFFER
SDL_Texture *RENDER_BACKBUFFER;
SDL_Texture *RENDER_BACKBUFFER;
#else
#endif
void renderBackBufferInit(void) {
errorret_t renderBackBufferInit(void) {
#if RENDER_USE_FRAMEBUFFER
RENDER_BACKBUFFER = SDL_CreateTexture(
RENDER_RENDERER,
SDL_PIXELFORMAT_RGBA8888,
SDL_TEXTUREACCESS_TARGET,
RENDER_WINDOW_WIDTH_DEFAULT,
RENDER_WINDOW_HEIGHT_DEFAULT
RENDER_WIDTH,
RENDER_HEIGHT
);
if(!RENDER_BACKBUFFER) {
assertUnreachable("SDL_CreateTexture failed\n");
return;
errorThrow("SDL_CreateTexture failed: %s", SDL_GetError());
}
// Make sure we unbind the back buffer after creation
SDL_SetRenderTarget(RENDER_RENDERER, NULL);
#else
// No back buffer needed for window rendering
#endif
errorOk();
}
void renderBackBufferBind(void) {
#if RENDER_USE_FRAMEBUFFER
SDL_SetRenderTarget(RENDER_RENDERER, RENDER_BACKBUFFER);
#endif
// Fill background with cornflower blue.
SDL_SetRenderDrawColor(RENDER_RENDERER, 100, 149, 237, 255);
SDL_RenderClear(RENDER_RENDERER);
}
void renderBackBufferUnbind(void) {
#if RENDER_USE_FRAMEBUFFER
SDL_SetRenderTarget(RENDER_RENDERER, NULL);
#endif
}
void renderBackBufferDraw(void) {
#if RENDER_USE_FRAMEBUFFER
// Clear background black
SDL_SetRenderDrawColor(RENDER_RENDERER, 0, 0, 0, 255);
SDL_RenderClear(RENDER_RENDERER);
// Create a quad that is scaled to fit but maintain original aspect ratio
int32_t windowWidth, windowHeight;
SDL_GetWindowSize(RENDER_WINDOW, &windowWidth, &windowHeight);
int32_t renderWidth, renderHeight, renderX, renderY;
if(RENDER_WIDTH * windowHeight > RENDER_HEIGHT * windowWidth) {
renderWidth = windowWidth;
renderHeight = (RENDER_HEIGHT * windowWidth) / RENDER_WIDTH;
renderX = 0;
renderY = (windowHeight - renderHeight) / 2;
} else {
renderWidth = (RENDER_WIDTH * windowHeight) / RENDER_HEIGHT;
renderHeight = windowHeight;
renderX = (windowWidth - renderWidth) / 2;
renderY = 0;
}
// Draw the back buffer texture
SDL_Rect destRect = { renderX, renderY, renderWidth, renderHeight };
SDL_RenderCopy(RENDER_RENDERER, RENDER_BACKBUFFER, NULL, &destRect);
#else
// No back buffer to draw
#endif
}
errorret_t renderBackBufferDispose(void) {
#if RENDER_USE_FRAMEBUFFER
SDL_DestroyTexture(RENDER_BACKBUFFER);
RENDER_BACKBUFFER = NULL;
#endif
errorOk();
}