From a0803b439e59d699f940b915d8b7e110de32b7cf Mon Sep 17 00:00:00 2001 From: Ben Date: Thu, 10 Jan 2019 18:12:41 +0000 Subject: [PATCH] OpenGL --- OpenGL/cube/.gitignore | 4 ++ OpenGL/cube/CMakeLists.txt | 46 ++++++++++++ OpenGL/cube/CMakeModules/FindSDL2_image.cmake | 67 ++++++++++++++++++ OpenGL/cube/cube.a | Bin 0 -> 17944 bytes OpenGL/cube/src/main.cpp | 58 +++++++++++++++ 5 files changed, 175 insertions(+) create mode 100644 OpenGL/cube/.gitignore create mode 100644 OpenGL/cube/CMakeLists.txt create mode 100644 OpenGL/cube/CMakeModules/FindSDL2_image.cmake create mode 100755 OpenGL/cube/cube.a create mode 100644 OpenGL/cube/src/main.cpp diff --git a/OpenGL/cube/.gitignore b/OpenGL/cube/.gitignore new file mode 100644 index 0000000..cfe92b2 --- /dev/null +++ b/OpenGL/cube/.gitignore @@ -0,0 +1,4 @@ +CMakeFiles/ +cmake_install.cmake +CMakeCache.txt +Makefile diff --git a/OpenGL/cube/CMakeLists.txt b/OpenGL/cube/CMakeLists.txt new file mode 100644 index 0000000..813f984 --- /dev/null +++ b/OpenGL/cube/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required(VERSION 3.7) +project(gl-cube) + +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} CMakeModules/) +cmake_policy(SET CMP0037 OLD) + +set(executable cube.a) +set(SrcDIR ./src) +set(IncludeDIR ./include) + +find_package(SDL2 REQUIRED) +find_package(SDL2_image REQUIRED) +find_package(PNG REQUIRED) + +set(THREADS_PREFER_PTHREAD_FLAD ON) +find_package(Threads REQUIRED) +find_package(OpenGL REQUIRED) +find_package(GLEW REQUIRED) + +include_directories(${executable} + ${SDL2_INCLUDE_DIR} + ${SDL2_IMAGE_INCLUDE_DIR} + ${GLEW_INCLUDE_DIRS} + ${IncludeDIR} +) + +file(GLOB_RECURSE SourceFiles + ${SrcDIR}/* +) + +add_executable(${executable} ${SourceFiles}) + +set_target_properties(${executable} PROPERTIES + CXX_STANDARD 17 + CXX_EXTENSIONS OFF +) + +target_link_libraries(${executable} + SDL2 + SDL2_image + PNG::PNG + Threads::Threads + OpenGL::OpenGL + OpenGL::GL + GLEW +) diff --git a/OpenGL/cube/CMakeModules/FindSDL2_image.cmake b/OpenGL/cube/CMakeModules/FindSDL2_image.cmake new file mode 100644 index 0000000..7d47ffe --- /dev/null +++ b/OpenGL/cube/CMakeModules/FindSDL2_image.cmake @@ -0,0 +1,67 @@ +FIND_PATH(SDL2_IMAGE_INCLUDE_DIR SDL_image.h + HINTS + ${SDL2} + $ENV{SDL2} + $ENV{SDL2_IMAGE} + PATH_SUFFIXES include/SDL2 include SDL2 + i686-w64-mingw32/include/SDL2 + x86_64-w64-mingw32/include/SDL2 + PATHS + ~/Library/Frameworks + /Library/Frameworks + /usr/local/include/SDL2 + /usr/include/SDL2 + /sw # Fink + /opt/local # DarwinPorts + /opt/csw # Blastwave + /opt +) + +# Lookup the 64 bit libs on x64 +IF(CMAKE_SIZEOF_VOID_P EQUAL 8) + FIND_LIBRARY(SDL2_IMAGE_LIBRARY_TEMP + NAMES SDL2_image + HINTS + ${SDL2} + $ENV{SDL2} + $ENV{SDL2_IMAGE} + PATH_SUFFIXES lib64 lib + lib/x64 + x86_64-w64-mingw32/lib + PATHS + /sw + /opt/local + /opt/csw + /opt + ) +# On 32bit build find the 32bit libs +ELSE(CMAKE_SIZEOF_VOID_P EQUAL 8) + FIND_LIBRARY(SDL2_IMAGE_LIBRARY_TEMP + NAMES SDL2_image + HINTS + ${SDL2} + $ENV{SDL2} + $ENV{SDL2_IMAGE} + PATH_SUFFIXES lib + lib/x86 + i686-w64-mingw32/lib + PATHS + /sw + /opt/local + /opt/csw + /opt + ) +ENDIF(CMAKE_SIZEOF_VOID_P EQUAL 8) + +SET(SDL2_IMAGE_FOUND "NO") + IF(SDL2_IMAGE_LIBRARY_TEMP) + # Set the final string here so the GUI reflects the final state. + SET(SDL2_IMAGE_LIBRARY ${SDL2_IMAGE_LIBRARY_TEMP} CACHE STRING "Where the SDL2_image Library can be found") + # Set the temp variable to INTERNAL so it is not seen in the CMake GUI + SET(SDL2_IMAGE_LIBRARY_TEMP "${SDL2_IMAGE_LIBRARY_TEMP}" CACHE INTERNAL "") + SET(SDL2_IMAGE_FOUND "YES") +ENDIF(SDL2_IMAGE_LIBRARY_TEMP) + +INCLUDE(FindPackageHandleStandardArgs) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_IMAGE REQUIRED_VARS SDL2_IMAGE_LIBRARY SDL2_IMAGE_INCLUDE_DIR) \ No newline at end of file diff --git a/OpenGL/cube/cube.a b/OpenGL/cube/cube.a new file mode 100755 index 0000000000000000000000000000000000000000..45a39f4a1fb0bb4f1641461989d50fd14ee0db2c GIT binary patch literal 17944 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 xoHDpuHJI!W#O>$#hwcw +#include +#include + +class Game { +public: + SDL_Window* window = nullptr; + SDL_GLContext glContext = nullptr; + bool isWindowClosed = true; +}; + +int main(int argc, char** argv) { + Game* game = new Game(); + SDL_Init(SDL_INIT_EVERYTHING); + + SDL_GL_SetSwapInterval(0); + SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); + SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); + SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); + + game->window = SDL_CreateWindow("GL CUBE", + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + 400, 400, + SDL_WINDOW_OPENGL); + game->glContext = SDL_GL_CreateContext(game->window); + + GLenum GLEWStatus = glewInit(); + if (GLEWStatus != GLEW_OK) { + std::cerr << "FAILED TO INITALIZE GLEW" << std::endl; + } + + // SDL_WarpMouseInWindow(m_window, width / 2, height / 2); + // SDL_SetRelativeMouseMode(SDL_TRUE); + game->isWindowClosed = false; + + glClearColor(0.1f, 0.45f, 0.9f, 1.0f); + + SDL_Event event; + while (!game->isWindowClosed) { + glClear(GL_COLOR_BUFFER_BIT); + + while (SDL_PollEvent(&event) != 0) + if (event.key.keysym.sym == SDLK_ESCAPE) + game->isWindowClosed = true; + + + SDL_GL_SwapWindow(game->window); + } + + game->isWindowClosed = true; + SDL_GL_DeleteContext(game->glContext); + SDL_DestroyWindow(game->window); + SDL_Quit(); +}