Added GL_Context and fixed debug memory leak detection

This commit is contained in:
Warwick 2025-06-25 12:01:54 +01:00
parent e054930fb1
commit a3a2cd9de2
3 changed files with 36 additions and 24 deletions

1
.gitignore vendored
View file

@ -10,3 +10,4 @@ CPackSourceConfig.cmake
Makefile Makefile
_deps/ _deps/
cmake_install.cmake cmake_install.cmake
.cache/

View file

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR) cmake_minimum_required(VERSION 3.25 FATAL_ERROR)
project(webgpu project(webgpu
VERSION 0 VERSION 0
DESCRIPTION "Simple Engine Experiment in C" DESCRIPTION "Simple Engine Experiment in C"
@ -16,21 +16,11 @@ if(CMAKE_EXPORT_COMPILE_COMMANDS)
${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}) ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES})
endif() endif()
# Error on memory address issues in debug mode
if(CMAKE_BUILD_TYPE MATCHES "Debug")
set(
CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} -Werror -fsanitize=undefined -fsanitize=address"
)
target_link_options(${PROJECT_NAME}
BEFORE PUBLIC -fsanitize=undefined PUBLIC -fsanitize=address
)
endif()
option(USE_VENDORED_LIBRARIES "Use vendored libraries" ON) option(USE_VENDORED_LIBRARIES "Use vendored libraries" ON)
if(USE_VENDORED_LIBRARIES) if(USE_VENDORED_LIBRARIES)
set(OpenGL_GL_PREFERENCE GLVND)
add_definitions(-DSDL_STATIC=ON) add_definitions(-DSDL_STATIC=ON)
add_subdirectory(extern/SDL3 EXCLUDE_FROM_ALL) add_subdirectory(extern/SDL3 EXCLUDE_FROM_ALL)
set(SDL3_LIBRARIES SDL3::SDL3) set(SDL3_LIBRARIES SDL3::SDL3)
@ -59,7 +49,6 @@ if(USE_VENDORED_LIBRARIES)
set(GLEW_INCLUDE_DIRS ${glew_SOURCE_DIR}/include) set(GLEW_INCLUDE_DIRS ${glew_SOURCE_DIR}/include)
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
set(OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY}) set(OPENGL_LIBRARIES ${OPENGL_gl_LIBRARY})
set(OPENGL_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR}) set(OPENGL_INCLUDE_DIRS ${OPENGL_INCLUDE_DIR})
@ -67,11 +56,11 @@ else()
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3-shared) find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3-shared)
endif() endif()
get_cmake_property(_variableNames VARIABLES) #get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames) #list (SORT _variableNames)
foreach (_variableName ${_variableNames}) #foreach (_variableName ${_variableNames})
message(STATUS "${_variableName}=${${_variableName}}") # message(STATUS "${_variableName}=${${_variableName}}")
endforeach() #endforeach()
file(GLOB_RECURSE SOURCE_FILES file(GLOB_RECURSE SOURCE_FILES
${CMAKE_SOURCE_DIR}/src/*.c) ${CMAKE_SOURCE_DIR}/src/*.c)
@ -79,6 +68,17 @@ file(GLOB_RECURSE HEADER_FILES
${CMAKE_SOURCE_DIR}/src/*.h) ${CMAKE_SOURCE_DIR}/src/*.h)
add_executable(${PROJECT_NAME} ${HEADER_FILES} ${SOURCE_FILES}) add_executable(${PROJECT_NAME} ${HEADER_FILES} ${SOURCE_FILES})
# Error on memory address issues in debug mode
if(CMAKE_BUILD_TYPE MATCHES "Debug")
set(
CMAKE_C_FLAGS
"${CMAKE_C_FLAGS} -Werror -fsanitize=undefined -fsanitize=address"
)
target_link_options(${PROJECT_NAME}
BEFORE PUBLIC -fsanitize=undefined PUBLIC -fsanitize=address
)
endif()
target_include_directories(${PROJECT_NAME} PRIVATE target_include_directories(${PROJECT_NAME} PRIVATE
${SDL3_INCLUDE_DIRS} ${SDL3_INCLUDE_DIRS}
${SDL3_image_INCLUDE_DIRS} ${SDL3_image_INCLUDE_DIRS}

View file

@ -1,5 +1,6 @@
#include "SDL3/SDL_init.h" #include "SDL3/SDL_init.h"
#include "SDL3/SDL_log.h" #include "SDL3/SDL_log.h"
#include "SDL3/SDL_opengl.h"
#include "SDL3/SDL_render.h" #include "SDL3/SDL_render.h"
#include "SDL3/SDL_video.h" #include "SDL3/SDL_video.h"
#include <stdlib.h> #include <stdlib.h>
@ -15,25 +16,35 @@ int main(int argc, char *argv[]) {
return EXIT_FAILURE; return EXIT_FAILURE;
} }
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 6);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
window = SDL_CreateWindow("Hello SDL3", 320, 240, SDL_WINDOW_OPENGL); window = SDL_CreateWindow("Hello SDL3", 320, 240,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
if (!window) { if (!window) {
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't create windowe: %s",
"Couldn't create window and renderer: %s", SDL_GetError()); SDL_GetError());
return EXIT_FAILURE; return EXIT_FAILURE;
} }
SDL_GLContext glcontext = SDL_GL_CreateContext(window);
while (1) { while (1) {
// handle input
SDL_PollEvent(&event); SDL_PollEvent(&event);
if (event.type == SDL_EVENT_QUIT) { if (event.type == SDL_EVENT_QUIT) {
break; break;
} }
// render
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
SDL_GL_SwapWindow(window);
} }
SDL_GL_DestroyContext(glcontext);
SDL_DestroyWindow(window); SDL_DestroyWindow(window);
SDL_Quit(); SDL_Quit();