About to add scene rendering
This commit is contained in:
@@ -10,6 +10,7 @@ target_sources(${DUSK_TARGET_NAME}
|
||||
renderbackbuffer.c
|
||||
rendertext.c
|
||||
renderconsole.c
|
||||
renderscene.c
|
||||
)
|
||||
|
||||
# Subdirs
|
||||
|
@@ -11,6 +11,8 @@
|
||||
#include "rendertext.h"
|
||||
#include "renderconsole.h"
|
||||
#include "console/console.h"
|
||||
#include "dusksdl2input.h"
|
||||
#include "renderscene.h"
|
||||
|
||||
SDL_Window *RENDER_WINDOW;
|
||||
SDL_Renderer *RENDER_RENDERER;
|
||||
@@ -18,7 +20,13 @@ bool_t RENDER_RUNNING;
|
||||
|
||||
errorret_t renderInit(void) {
|
||||
// Init SDL
|
||||
if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER) != 0) {
|
||||
uint32_t flags = SDL_INIT_VIDEO;
|
||||
|
||||
#if INPUT_SUPPORT_GAMEPAD
|
||||
flags |= SDL_INIT_GAMECONTROLLER;
|
||||
#endif
|
||||
|
||||
if(SDL_Init(flags) != 0) {
|
||||
errorThrow(
|
||||
"SDL Failed to Initialize: %s",
|
||||
SDL_GetError()
|
||||
@@ -32,8 +40,7 @@ errorret_t renderInit(void) {
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
RENDER_WINDOW_WIDTH_DEFAULT,
|
||||
RENDER_WINDOW_HEIGHT_DEFAULT,
|
||||
0
|
||||
// SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI
|
||||
SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI
|
||||
);
|
||||
if(!RENDER_WINDOW) {
|
||||
errorThrow("SDL_CreateWindow failed: %s", SDL_GetError());
|
||||
@@ -54,6 +61,7 @@ errorret_t renderInit(void) {
|
||||
|
||||
// Init other things
|
||||
renderTextInit();
|
||||
renderSceneInit();
|
||||
|
||||
// Mark ready.
|
||||
RENDER_RUNNING = true;
|
||||
@@ -78,6 +86,7 @@ errorret_t renderDraw(void) {
|
||||
renderBackBufferBind();
|
||||
|
||||
// Draw everything
|
||||
renderSceneDraw();
|
||||
renderConsoleDraw();
|
||||
|
||||
// Unbind the backbuffer
|
||||
@@ -93,6 +102,9 @@ errorret_t renderDraw(void) {
|
||||
}
|
||||
|
||||
errorret_t renderDispose(void) {
|
||||
renderTextDispose();
|
||||
renderSceneDispose();
|
||||
|
||||
renderBackBufferDispose();
|
||||
|
||||
SDL_DestroyRenderer(RENDER_RENDERER);
|
||||
|
20
src/dusksdl2/display/renderscene.c
Normal file
20
src/dusksdl2/display/renderscene.c
Normal file
@@ -0,0 +1,20 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "renderscene.h"
|
||||
|
||||
void renderSceneInit(void) {
|
||||
// Initialize scene-related resources here
|
||||
}
|
||||
|
||||
void renderSceneDraw(void) {
|
||||
// Draw the current scene here
|
||||
}
|
||||
|
||||
void renderSceneDispose(void) {
|
||||
// Dispose of scene-related resources here
|
||||
}
|
24
src/dusksdl2/display/renderscene.h
Normal file
24
src/dusksdl2/display/renderscene.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "dusk.h"
|
||||
|
||||
/**
|
||||
* Initializes the render scene module.
|
||||
*/
|
||||
void renderSceneInit(void);
|
||||
|
||||
/**
|
||||
* Draws the current scene.
|
||||
*/
|
||||
void renderSceneDraw(void);
|
||||
|
||||
/**
|
||||
* Disposes of the render scene module.
|
||||
*/
|
||||
void renderSceneDispose(void);
|
@@ -27,9 +27,11 @@ void renderTextInit(void) {
|
||||
);
|
||||
assertNotNull(surface, "Failed to create surface for text rendering");
|
||||
|
||||
// Get the pixel format and pitch
|
||||
const int32_t pitch_px = surface->pitch / 4;
|
||||
uint32_t *pixels = (uint32_t *)surface->pixels;
|
||||
|
||||
// Buffer the pixels.
|
||||
for(int tileIndex = 0; tileIndex < FONT_TILE_COUNT; ++tileIndex) {
|
||||
const int32_t tileX = (tileIndex % FONT_COLUMN_COUNT) * FONT_TILE_WIDTH;
|
||||
const int32_t tileY = (tileIndex / FONT_COLUMN_COUNT) * FONT_TILE_HEIGHT;
|
||||
@@ -37,20 +39,21 @@ void renderTextInit(void) {
|
||||
|
||||
for (int y = 0; y < FONT_TILE_HEIGHT; ++y) {
|
||||
for (int x = 0; x < FONT_TILE_WIDTH; ++x) {
|
||||
const uint8_t color = tile[y * FONT_TILE_WIDTH + x] ? 0xFF : 0;
|
||||
// Convert to RGBA (8 bits per channel)
|
||||
const uint32_t rgba = color ? 0xFFFFFFFF : 0x00000000;
|
||||
pixels[(tileY + y) * pitch_px + (tileX + x)] = rgba;
|
||||
pixels[(tileY + y) * pitch_px + (tileX + x)] = (
|
||||
tile[y * FONT_TILE_WIDTH + x] ? 0xFFFFFFFF : 0x00000000
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Create texture from the surface
|
||||
RENDER_TEXT_TEXTURE = SDL_CreateTextureFromSurface(
|
||||
RENDER_RENDERER,
|
||||
surface
|
||||
);
|
||||
assertNotNull(RENDER_TEXT_TEXTURE, "Failed to create texture from surface");
|
||||
|
||||
// Cleanup the surface
|
||||
SDL_FreeSurface(surface);
|
||||
SDL_SetTextureBlendMode(RENDER_TEXT_TEXTURE, SDL_BLENDMODE_BLEND);
|
||||
}
|
||||
@@ -109,4 +112,10 @@ void renderTextDraw(
|
||||
renderTextDrawChar(posX, posY, c);
|
||||
posX += FONT_TILE_WIDTH;
|
||||
}
|
||||
}
|
||||
|
||||
void renderTextDispose(void) {
|
||||
assertNotNull(RENDER_TEXT_TEXTURE, "Texture cannot be NULL");
|
||||
SDL_DestroyTexture(RENDER_TEXT_TEXTURE);
|
||||
RENDER_TEXT_TEXTURE = NULL;
|
||||
}
|
@@ -40,4 +40,9 @@ void renderTextDraw(
|
||||
const float_t x,
|
||||
const float_t y,
|
||||
const char_t *text
|
||||
);
|
||||
);
|
||||
|
||||
/**
|
||||
* Disposes of the text rendering system, freeing any allocated resources.
|
||||
*/
|
||||
void renderTextDispose(void);
|
Reference in New Issue
Block a user