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 0000000..45a39f4 Binary files /dev/null and b/OpenGL/cube/cube.a differ diff --git a/OpenGL/cube/src/main.cpp b/OpenGL/cube/src/main.cpp new file mode 100644 index 0000000..59c0108 --- /dev/null +++ b/OpenGL/cube/src/main.cpp @@ -0,0 +1,58 @@ +#include +#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(); +}