cmake_minimum_required(VERSION 3.11) set(BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) set(INC_DIR ${BASE_DIR}/src) set(SRC_DIR ${BASE_DIR}/src/sample) ######################################################################## ## support ######################################################################## # targeting c11 set(CMAKE_C_STANDARD 11) enable_language(C) # msvc hint # includes include_directories(${INC_DIR}) set(CMAKE_MACOSX_RPATH 1) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") ######################################################################## ## dependencies ######################################################################## find_package(SDL2 REQUIRED) find_package(Threads REQUIRED) ######################################################################## ## project ######################################################################## project(sample) set(SAMPLE_SRCS ${SRC_DIR}/main.c ) add_executable(sample ${SAMPLE_SRCS}) target_link_libraries(sample SDL2::SDL2 SDL2::SDL2main) target_link_libraries(sample Threads::Threads) install (TARGETS sample RUNTIME DESTINATION bin) ``` *(main.c)* ```c #include #include #include static void err(const char *format, ...) { fprintf(stderr, "(error) "); va_list args; va_start(args, format); vfprintf(stderr, format, args); va_end(args); fprintf(stderr, "\n"); fflush(stderr); } int main(void) { SDL_Renderer* renderer; SDL_Surface* imgSurface; SDL_Texture* imgTexture; SDL_Window* window; if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) < 0) { err("sdl2 init: %s", SDL_GetError()); return 1; } window = SDL_CreateWindow("releng-tool", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1280, 640, SDL_WINDOW_OPENGL); if (window == NULL) { err("failed to create window"); return 1; } renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); if (renderer == NULL) { err("failed to create renderer"); return 1; } // read the image into a texture imgSurface = SDL_LoadBMP("releng-tool.bmp"); if (imgSurface == NULL) { err("failed to load image: %s", SDL_GetError()); return 1; } imgTexture = SDL_CreateTextureFromSurface(renderer, imgSurface); if (imgTexture == NULL) { err("failed to create texture"); return 1; } SDL_FreeSurface(imgSurface); while (true) { // wait until a quit is issued SDL_Event e; if (SDL_PollEvent(&e)) { if (e.type == SDL_QUIT) break; } // render the image SDL_RenderClear(renderer); SDL_RenderCopy(renderer, imgTexture, NULL, NULL); SDL_RenderPresent(renderer); } // cleanup SDL_DestroyTexture(imgTexture); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; }