From a6d928d6e3ea637788b93f429cca624f75fe71d3 Mon Sep 17 00:00:00 2001 From: Andre Popovitch Date: Fri, 16 Aug 2024 12:51:19 -0500 Subject: [PATCH] Add github action & remove openal --- .github/workflows/release.yaml | 101 +++++++++++++++++++ OpenGL/CMakeLists.txt | 42 ++++++-- OpenGL/diff.txt | 154 ----------------------------- OpenGL/src/Application.cpp | 1 - OpenGL/src/game_objects/Player.cpp | 2 + readme.md | 4 + 6 files changed, 140 insertions(+), 164 deletions(-) create mode 100644 .github/workflows/release.yaml delete mode 100644 OpenGL/diff.txt diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 00000000..e45ca270 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,101 @@ +name: Release SpaceBoom + +on: + release: + types: [created] + +jobs: + build: + name: Build on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest, windows-latest] + include: + - os: ubuntu-latest + output_name: SpaceBoom-linux + - os: macos-latest + output_name: SpaceBoom-macos + - os: windows-latest + output_name: SpaceBoom-windows.exe + + steps: + - uses: actions/checkout@v2 + + - name: Install dependencies (Ubuntu) + if: matrix.os == 'ubuntu-latest' + run: | + sudo apt-get update + sudo apt-get install -y cmake ninja-build libgl1-mesa-dev libglew-dev libglfw3-dev + + - name: Install dependencies (macOS) + if: matrix.os == 'macos-latest' + run: | + brew install cmake ninja glew glfw3 + + - name: Install dependencies (Windows) + if: matrix.os == 'windows-latest' + run: | + choco install cmake ninja + + - name: Configure CMake + run: | + mkdir build + cd build + cmake -GNinja .. + + - name: Build + run: | + cd build + ninja + + - name: Prepare release package + run: | + mkdir release + cp build/OpenGL/OpenGL release/${{ matrix.output_name }} + cp -r OpenGL/res release/res + + - name: Create release artifact + uses: actions/upload-artifact@v2 + with: + name: ${{ matrix.output_name }} + path: release + + upload: + needs: build + runs-on: ubuntu-latest + steps: + - name: Download all artifacts + uses: actions/download-artifact@v2 + + - name: Create release archives + run: | + for dir in */; do + zip -r "${dir%/}.zip" "$dir" + done + + - name: Upload release assets + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const fs = require('fs').promises; + const { repo: { owner, repo }, sha } = context; + const release = await github.rest.repos.getReleaseByTag({ + owner, + repo, + tag: process.env.GITHUB_REF.replace('refs/tags/', '') + }); + + const assets = await fs.readdir('.'); + for (const asset of assets) { + if (asset.endsWith('.zip')) { + await github.rest.repos.uploadReleaseAsset({ + owner, + repo, + release_id: release.data.id, + name: asset, + data: await fs.readFile(asset) + }); + } + } diff --git a/OpenGL/CMakeLists.txt b/OpenGL/CMakeLists.txt index 63b673ca..28afc61a 100644 --- a/OpenGL/CMakeLists.txt +++ b/OpenGL/CMakeLists.txt @@ -7,19 +7,43 @@ file(GLOB_RECURSE header_files "src/*.h") find_package(OpenGL REQUIRED) ## GLFW -find_package(PkgConfig REQUIRED) -pkg_check_modules(GLFW REQUIRED glfw3) - -## OpenAL -find_package(OpenAL REQUIRED) +if(WIN32) + set(GLFW_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/OpenGL/Dependencies/GLFW/include") + set(GLFW_LIBRARY "${CMAKE_SOURCE_DIR}/OpenGL/Dependencies/GLFW/lib-vc2022") +else() + find_package(PkgConfig REQUIRED) + pkg_check_modules(GLFW REQUIRED glfw3) +endif() ## GLEW -find_package(GLEW REQUIRED) +if(WIN32) + set(GLEW_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/OpenGL/Dependencies/GLEW/include") + set(GLEW_LIBRARY "${CMAKE_SOURCE_DIR}/OpenGL/Dependencies/GLEW/lib/Release/x64/glew32s.lib") +else() + find_package(GLEW REQUIRED) +endif() add_executable(${PROJECT_NAME} ${cpp_files} ${header_files}) -target_include_directories(${PROJECT_NAME} PRIVATE ${OPENAL_INCLUDE_DIR} ${GlFW_INCLUDE_DIRS} ${GlEW_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIRS} Dependencies/OpenAL/include) - -target_link_libraries(${PROJECT_NAME} -L${GLFW_LIBDIR} ${GLFW_LIBRARIES} GLEW::GLEW ${OPENGL_LIBRARIES} ${OPENAL_LIBRARY}) +target_include_directories(${PROJECT_NAME} PRIVATE + ${GLFW_INCLUDE_DIR} + ${GLEW_INCLUDE_DIR} + ${OPENGL_INCLUDE_DIRS} +) + +if(WIN32) + target_link_libraries(${PROJECT_NAME} + ${GLFW_LIBRARY} + ${GLEW_LIBRARY} + ${OPENGL_LIBRARIES} + ) + target_compile_definitions(${PROJECT_NAME} PRIVATE GLEW_STATIC) +else() + target_link_libraries(${PROJECT_NAME} + -L${GLFW_LIBDIR} ${GLFW_LIBRARIES} + GLEW::GLEW + ${OPENGL_LIBRARIES} + ) +endif() set_property(TARGET ${PROJECT_NAME} PROPERTY PUBLIC_HEADER ${header_files}) diff --git a/OpenGL/diff.txt b/OpenGL/diff.txt deleted file mode 100644 index 800648b0..00000000 --- a/OpenGL/diff.txt +++ /dev/null @@ -1,154 +0,0 @@ -diff --git a/OpenGL/OpenGL.vcxproj b/OpenGL/OpenGL.vcxproj -index 6dfae7f..b9ffc9c 100644 ---- a/OpenGL/OpenGL.vcxproj -+++ b/OpenGL/OpenGL.vcxproj -@@ -50,6 +50,7 @@ - GLEW_STATIC;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - C:\Dev\OpenGL\OpenGL\Dependencies\OpenAL\include;$(SolutionDir)OpenGL\Dependencies\GLEW\include;$(SolutionDir)OpenGL\Dependencies\GLFW\include -+ stdcpp20 - - - Console -@@ -67,6 +68,7 @@ - GLEW_STATIC;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - C:\Dev\OpenGL\OpenGL\Dependencies\OpenAL\include;$(SolutionDir)OpenGL\Dependencies\GLEW\include;$(SolutionDir)OpenGL\Dependencies\GLFW\include -+ stdcpp20 - - - Console -diff --git a/OpenGL/src/Application.cpp b/OpenGL/src/Application.cpp -index 9852848..a5f7f34 100644 ---- a/OpenGL/src/Application.cpp -+++ b/OpenGL/src/Application.cpp -@@ -110,7 +110,7 @@ int main(void) - const GLFWvidmode* mode = glfwGetVideoMode(primaryMonitor); - - // Create a fullscreen window -- GLFWwindow* window = glfwCreateWindow(mode->width, mode->height, "SpaceBoom", primaryMonitor, NULL); -+ GLFWwindow* window = glfwCreateWindow(mode->width, mode->height, "SpaceBoom", NULL, NULL); - if (!window) { - std::cerr << "Failed to create GLFW window" << std::endl; - glfwTerminate(); -diff --git a/OpenGL/src/Shader.h b/OpenGL/src/Shader.h -index 593b1bb..69c95b6 100644 ---- a/OpenGL/src/Shader.h -+++ b/OpenGL/src/Shader.h -@@ -15,7 +15,7 @@ private: - std::string m_FilePath; - unsigned int m_RendererID; - std::unordered_map < std::string, int> m_UniformLocationCache; -- // chaching for uniforms -+ // caching for uniforms - - public: - Shader(const std::string& filepath); -diff --git a/OpenGL/src/game_objects/GameObject.cpp b/OpenGL/src/game_objects/GameObject.cpp -index 2a00568..e00df85 100644 ---- a/OpenGL/src/game_objects/GameObject.cpp -+++ b/OpenGL/src/game_objects/GameObject.cpp -@@ -14,6 +14,23 @@ void GameObject::update() - - } - -+void GameObject::setUpShader(Renderer& renderer) -+{ -+ if (shader.has_value()) { -+ int width, height; -+ glfwGetWindowSize(renderer.window, &width, &height); // Get the current window size -+ glViewport(0, 0, width, height); -+ -+ /* Render here */ -+ float currentTime = glfwGetTime(); // Or any other method to get the elapsed time -+ -+ shader->Bind(); -+ shader->SetUniform1f("u_AspectRatio", float(width) / float(height)); -+ shader->SetUniform2f("u_Position", x, y); -+ } -+} -+ - void GameObject::render(Renderer& renderer) { -+ setUpShader(renderer); - std::cout << "GameObject render was called" << std::endl; - } -\ No newline at end of file -diff --git a/OpenGL/src/game_objects/GameObject.h b/OpenGL/src/game_objects/GameObject.h -index 3961077..d921dea 100644 ---- a/OpenGL/src/game_objects/GameObject.h -+++ b/OpenGL/src/game_objects/GameObject.h -@@ -4,6 +4,7 @@ - #include - #include - #include -+#include - - #include "../Renderer.h" - #include "../VertexBuffer.h" -@@ -16,10 +17,11 @@ class GameObject { - public: - GameObject(const std::string& name, int drawPriority, float x, float y); - -+ virtual void setUpShader(Renderer& renderer); - virtual void render(Renderer& renderer); - virtual void update(); - -- Shader shader; -+ std::optional shader; - - std::string name; - int drawPriority; -diff --git a/OpenGL/src/game_objects/SquareObject.cpp b/OpenGL/src/game_objects/SquareObject.cpp -index 9307804..b6abc7b 100644 ---- a/OpenGL/src/game_objects/SquareObject.cpp -+++ b/OpenGL/src/game_objects/SquareObject.cpp -@@ -8,7 +8,16 @@ SquareObject::SquareObject(const std::string& name, int drawPriority, float x, f - shader = Shader("res/shaders/shader.shader"); - } - -+void SquareObject::setUpShader(Renderer& renderer) -+{ -+ GameObject::setUpShader(renderer); -+ shader->SetUniform4f("u_Color", r, g, b, 1.0f); -+} -+ - void SquareObject::render(Renderer& renderer) { -+ -+ GameObject::render(renderer); -+ - float positions[] = { - -0.5f, -0.5f, - 0.5f, -0.5f, -@@ -34,19 +43,7 @@ void SquareObject::render(Renderer& renderer) { - - IndexBuffer ib(indices, 6); - -- int width, height; -- glfwGetWindowSize(renderer.window, &width, &height); // Get the current window size -- glViewport(0, 0, width, height); -- -- /* Render here */ -- float currentTime = glfwGetTime(); // Or any other method to get the elapsed time -- -- shader.Bind(); -- shader.SetUniform4f("u_Color", r, g, b, 1.0f); -- shader.SetUniform1f("u_AspectRatio", float(width) / float(height)); -- shader.SetUniform2f("u_Position", x, y); -- -- renderer.Draw(va, ib, shader); -+ renderer.Draw(va, ib, shader.value()); - - } - -diff --git a/OpenGL/src/game_objects/SquareObject.h b/OpenGL/src/game_objects/SquareObject.h -index de5794c..9c6f367 100644 ---- a/OpenGL/src/game_objects/SquareObject.h -+++ b/OpenGL/src/game_objects/SquareObject.h -@@ -6,6 +6,7 @@ public: - SquareObject(const std::string& name, int drawPriority, float x, float y); - virtual void render(Renderer& renderer) override; - virtual void update() override; -+ virtual void setUpShader(Renderer& renderer) override; - protected: - float r = 0; - float g = 0; diff --git a/OpenGL/src/Application.cpp b/OpenGL/src/Application.cpp index 095715e1..fc30f178 100644 --- a/OpenGL/src/Application.cpp +++ b/OpenGL/src/Application.cpp @@ -227,7 +227,6 @@ int main(void) { glfwPollEvents(); } - // cleanupOpenAL(); glfwTerminate(); return 0; } diff --git a/OpenGL/src/game_objects/Player.cpp b/OpenGL/src/game_objects/Player.cpp index 7bf7aac3..ee3c293a 100644 --- a/OpenGL/src/game_objects/Player.cpp +++ b/OpenGL/src/game_objects/Player.cpp @@ -1,3 +1,5 @@ +#include + #include "Player.h" #include "../Input.h" #include "Camera.h" diff --git a/readme.md b/readme.md index bca359f4..d7baa596 100644 --- a/readme.md +++ b/readme.md @@ -13,3 +13,7 @@ to run: ``` cd ../OpenGL ../build/OpenGL/OpenGL +``` + +to package: +1. You need one folder with the contents of OpenGL/res/* and the built binary to sit next to one another.