Render textg
This commit is contained in:
@@ -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();
|
||||
}
|
Reference in New Issue
Block a user