SDL time
This commit is contained in:
35
src/dusksdl2/CMakeLists.txt
Normal file
35
src/dusksdl2/CMakeLists.txt
Normal file
@@ -0,0 +1,35 @@
|
||||
# Copyright (c) 2025 Dominic Masters
|
||||
#
|
||||
# This software is released under the MIT License.
|
||||
# https://opensource.org/licenses/MIT
|
||||
|
||||
# Compile defs
|
||||
target_compile_definitions(${DUSK_TARGET_NAME}
|
||||
PUBLIC
|
||||
# DUSK_KEYBOARD_SUPPORT=1
|
||||
)
|
||||
|
||||
# Libs
|
||||
find_package(SDL2 REQUIRED)
|
||||
|
||||
target_link_libraries(${DUSK_TARGET_NAME}
|
||||
PUBLIC
|
||||
SDL2::SDL2
|
||||
)
|
||||
|
||||
|
||||
# Includes
|
||||
target_include_directories(${DUSK_TARGET_NAME}
|
||||
PUBLIC
|
||||
${CMAKE_CURRENT_LIST_DIR}
|
||||
)
|
||||
|
||||
# Sources
|
||||
target_sources(${DUSK_TARGET_NAME}
|
||||
PRIVATE
|
||||
input.c
|
||||
main.c
|
||||
)
|
||||
|
||||
# Subdirs
|
||||
add_subdirectory(display)
|
13
src/dusksdl2/display/CMakeLists.txt
Normal file
13
src/dusksdl2/display/CMakeLists.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
# Copyright (c) 2025 Dominic Masters
|
||||
#
|
||||
# This software is released under the MIT License.
|
||||
# https://opensource.org/licenses/MIT
|
||||
|
||||
# Sources
|
||||
target_sources(${DUSK_TARGET_NAME}
|
||||
PRIVATE
|
||||
render.c
|
||||
)
|
||||
|
||||
# Subdirs
|
||||
# add_subdirectory(draw)
|
83
src/dusksdl2/display/render.c
Normal file
83
src/dusksdl2/display/render.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "render.h"
|
||||
#include "assert/assert.h"
|
||||
|
||||
SDL_Window *RENDER_WINDOW;
|
||||
SDL_Renderer *RENDER_RENDERER;
|
||||
bool_t RENDER_RUNNING;
|
||||
|
||||
errorret_t renderInit(void) {
|
||||
if(SDL_Init(SDL_INIT_VIDEO) != 0) {
|
||||
errorThrow(
|
||||
"SDL Failed to Initialize: %s",
|
||||
SDL_GetError()
|
||||
);
|
||||
}
|
||||
|
||||
RENDER_WINDOW = SDL_CreateWindow(
|
||||
"DuskSDL2",
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
RENDER_WINDOW_WIDTH_DEFAULT,
|
||||
RENDER_WINDOW_HEIGHT_DEFAULT,
|
||||
SDL_WINDOW_SHOWN
|
||||
);
|
||||
|
||||
#if RENDER_USE_FRAMEBUFFER
|
||||
printf("Using framebuffer for rendering\n");
|
||||
#else
|
||||
printf("Using window for rendering\n");
|
||||
#endif
|
||||
|
||||
RENDER_RENDERER = SDL_CreateRenderer(
|
||||
RENDER_WINDOW,
|
||||
-1,
|
||||
SDL_RENDERER_ACCELERATED
|
||||
);
|
||||
|
||||
if(!RENDER_RENDERER) {
|
||||
errorThrow("SDL_CreateRenderer failed: %s", SDL_GetError());
|
||||
}
|
||||
|
||||
RENDER_RUNNING = true;
|
||||
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t renderDraw(void) {
|
||||
SDL_Event event;
|
||||
while(SDL_PollEvent(&event)) {
|
||||
if(event.type == SDL_QUIT) {
|
||||
RENDER_RUNNING = false;
|
||||
}
|
||||
}
|
||||
|
||||
SDL_SetRenderDrawColor(RENDER_RENDERER, 0, 0, 0, 255);
|
||||
SDL_RenderClear(RENDER_RENDERER);
|
||||
|
||||
// Draw red triangle
|
||||
SDL_SetRenderDrawColor(RENDER_RENDERER, 255, 0, 0, 255);
|
||||
SDL_RenderDrawLine(RENDER_RENDERER, 100, 100, 200, 100);
|
||||
SDL_RenderDrawLine(RENDER_RENDERER, 200, 100, 150, 50);
|
||||
SDL_RenderDrawLine(RENDER_RENDERER, 150, 50, 100, 100);
|
||||
|
||||
SDL_RenderPresent(RENDER_RENDERER);
|
||||
|
||||
RENDER_FRAME++;
|
||||
|
||||
errorOk();
|
||||
}
|
||||
|
||||
errorret_t renderDispose(void) {
|
||||
SDL_DestroyRenderer(RENDER_RENDERER);
|
||||
SDL_DestroyWindow(RENDER_WINDOW);
|
||||
SDL_Quit();
|
||||
|
||||
errorOk();
|
||||
}
|
27
src/dusksdl2/display/render.h
Normal file
27
src/dusksdl2/display/render.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "dusksdl2.h"
|
||||
#include "display/renderbase.h"
|
||||
|
||||
#ifndef RENDER_WINDOW_WIDTH_DEFAULT
|
||||
#define RENDER_WINDOW_WIDTH_DEFAULT RENDER_WIDTH * 3
|
||||
#endif
|
||||
#ifndef RENDER_WINDOW_HEIGHT_DEFAULT
|
||||
#define RENDER_WINDOW_HEIGHT_DEFAULT RENDER_HEIGHT * 3
|
||||
#endif
|
||||
|
||||
#if RENDER_WIDTH == RENDER_WINDOW_WIDTH_DEFAULT && RENDER_HEIGHT == RENDER_WINDOW_HEIGHT_DEFAULT
|
||||
#define RENDER_USE_FRAMEBUFFER 0
|
||||
#else
|
||||
#define RENDER_USE_FRAMEBUFFER 1
|
||||
#endif
|
||||
|
||||
extern SDL_Window *RENDER_WINDOW;
|
||||
extern SDL_Renderer *RENDER_RENDERER;
|
||||
extern bool_t RENDER_RUNNING;
|
35
src/dusksdl2/display/renderbackbuffer.c
Normal file
35
src/dusksdl2/display/renderbackbuffer.c
Normal file
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "renderbackbuffer.h"
|
||||
|
||||
#if RENDER_USE_FRAMEBUFFER
|
||||
SDL_Texture *RENDER_BACKBUFFER;
|
||||
#else
|
||||
|
||||
#endif
|
||||
|
||||
void 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
|
||||
);
|
||||
|
||||
if(!RENDER_BACKBUFFER) {
|
||||
assertUnreachable("SDL_CreateTexture failed\n");
|
||||
return;
|
||||
}
|
||||
#else
|
||||
// No back buffer needed for window rendering
|
||||
#endif
|
||||
|
||||
|
||||
}
|
9
src/dusksdl2/display/renderbackbuffer.h
Normal file
9
src/dusksdl2/display/renderbackbuffer.h
Normal file
@@ -0,0 +1,9 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "dusksdl2.h"
|
10
src/dusksdl2/dusksdl2.h
Normal file
10
src/dusksdl2/dusksdl2.h
Normal file
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "dusk.h"
|
||||
#include <SDL2/SDL.h>
|
15
src/dusksdl2/input.c
Normal file
15
src/dusksdl2/input.c
Normal file
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "dusksdl2.h"
|
||||
#include "input.h"
|
||||
|
||||
uint8_t inputStateGet() {
|
||||
uint8_t state = 0;
|
||||
|
||||
return state;
|
||||
}
|
32
src/dusksdl2/main.c
Normal file
32
src/dusksdl2/main.c
Normal file
@@ -0,0 +1,32 @@
|
||||
/**
|
||||
* Copyright (c) 2025 Dominic Masters
|
||||
*
|
||||
* This software is released under the MIT License.
|
||||
* https://opensource.org/licenses/MIT
|
||||
*/
|
||||
|
||||
#include "display/render.h"
|
||||
#include "game.h"
|
||||
|
||||
#define mainError(ret) \
|
||||
if((ret).code != ERROR_OK) { \
|
||||
errorPrint(ret); \
|
||||
return (ret).code; \
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
errorret_t ret;
|
||||
|
||||
mainError(renderInit());
|
||||
gameInit();
|
||||
|
||||
while(RENDER_RUNNING) {
|
||||
gameUpdate();
|
||||
mainError(renderDraw());
|
||||
}
|
||||
|
||||
gameDispose();
|
||||
mainError(renderDispose());
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user