Skip to content

Instantly share code, notes, and snippets.

@doccaico
Last active December 7, 2023 06:19
Show Gist options
  • Save doccaico/34bf8f15ef8425d89bbd13df3657e472 to your computer and use it in GitHub Desktop.
Save doccaico/34bf8f15ef8425d89bbd13df3657e472 to your computer and use it in GitHub Desktop.
Triangle (SDL2) on Windows (MSVC + CMake + Ninja)
cmake_minimum_required(VERSION 3.25)
### Debug mode
# $ cmake -S . -B build-debug -GNinja -DCMAKE_BUILD_TYPE=Debug
# $ cmake --build build-debug
# $ cmake --install build-debug # SDL2.dllをコピー
# $ cmake --build build-debug && build-debug\game.exe
### Release mode
# $ cmake -S . -B build-release -GNinja -DCMAKE_BUILD_TYPE=Release
# $ cmake --build build-release
# $ cmake --install build-debug
# $ cmake --build build-release && build-release\game.exe
project(game LANGUAGES CXX)
# if(${CMAKE_BUILD_TYPE} MATCHES "Release")
# set(WINMAIN WIN32)
# else()
# set(WINMAIN "")
# endif()
#
# add_executable(${PROJECT_NAME} ${WINMAIN}
# src/main.cpp
# )
# set (SDL2_DIR "${PROJECT_SOURCE_DIR}/deps/SDL2-2.28.5/lib/cmake/SDL2")
set (SDL2_DIR "${PROJECT_SOURCE_DIR}/deps/SDL2-2.28.5/cmake")
find_package(SDL2 CONFIG REQUIRED)
add_executable(${PROJECT_NAME}
# WIN32
src/main.cc
)
set_property (TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 17)
target_compile_options(${PROJECT_NAME}
PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/utf-8>
/permissive-
/W4
)
# if(${CMAKE_BUILD_TYPE} MATCHES "Release")
# set_target_properties(${PROJECT_NAME} PROPERTIES
# LINK_FLAGS "/ENTRY:mainCRTStartup")
# endif()
set(INCS
PRIVATE ${SDL2_INCLUDE_DIRS}
# PUBLIC ${CMAKE_SOURCE_DIR}/deps/SDL2-2.28.5/include
)
target_include_directories(${PROJECT_NAME} ${INCS})
set(LIBS
${SDL2_LIBRARIES}
# ${CMAKE_SOURCE_DIR}/deps/SDL2-2.28.5/lib/x64/SDL2.lib
# ${CMAKE_SOURCE_DIR}/deps/SDL2-2.28.5/lib/x64/SDL2main.lib
# SDL2main
# user32.lib
# gdi32.lib
# winmm.lib
# opengl32.lib
)
target_link_libraries(${PROJECT_NAME} ${LIBS})
install(FILES ${PROJECT_SOURCE_DIR}/deps/SDL2-2.28.5/lib/x64/SDL2.dll DESTINATION ${CMAKE_BINARY_DIR})
# include(CMakePrintHelpers)
# cmake_print_variables(CMAKE_BINARY_DIR)
# cmake_print_variables(PROJECT_SOURCE_DIR)
// #include <iostream>
#include "SDL.h"
int main(int argc, char** argv)
{
(void) argc;
(void) argv;
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window* window = SDL_CreateWindow(
"SDL / テスト", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, SDL_WINDOW_SHOWN);
SDL_Renderer* renderer = SDL_CreateRenderer(
window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
SDL_Vertex vertex_1 = {{400, 150}, {255, 0, 0, 255}, {0, 0}};
SDL_Vertex vertex_2 = {{200, 450}, {0, 0, 255, 255}, {0, 0}};
SDL_Vertex vertex_3 = {{600, 450}, {0, 255, 0, 255}, {0, 0}};
SDL_Vertex vertices[] = {
vertex_1,
vertex_2,
vertex_3
};
bool running = true;
while(running)
{
SDL_Event ev;
while(SDL_PollEvent(&ev))
{
if((SDL_QUIT == ev.type) ||
(SDL_KEYDOWN == ev.type && SDL_SCANCODE_ESCAPE == ev.key.keysym.scancode))
{
running = false;
break;
}
}
SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE);
SDL_RenderClear(renderer);
SDL_RenderGeometry(renderer, NULL, vertices, 3, NULL, 0);
SDL_RenderPresent(renderer);
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
@doccaico
Copy link
Author

doccaico commented Dec 7, 2023

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment