diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5d69df1d..52ba6236 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,10 +1,6 @@ name: Build -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] +on: [push, pull_request] env: BUILD_TYPE: Debug @@ -37,4 +33,8 @@ jobs: - name: Run CellSim working-directory: ${{github.workspace}}/build - run: xvfb-run -a ./CellSim & sleep 20 ; kill $! \ No newline at end of file + run: xvfb-run -a ./CellSim & sleep 20 ; kill $! + + - name: Run Liquefied + working-directory: ${{github.workspace}}/build + run: xvfb-run -a ./Liquefied & sleep 20 ; kill $! \ No newline at end of file diff --git a/.github/workflows/static_analysis.yml b/.github/workflows/static_analysis.yml index 5e41418a..6c0e91cc 100644 --- a/.github/workflows/static_analysis.yml +++ b/.github/workflows/static_analysis.yml @@ -1,10 +1,6 @@ name: Static analysis -on: - push: - branches: [ "master" ] - pull_request: - branches: [ "master" ] +on: [push, pull_request] jobs: static_analysis: diff --git a/Apps/CellSim/CellSimApp.cpp b/Apps/CellSim/CellSimApp.cpp index de402b63..e65a5243 100644 --- a/Apps/CellSim/CellSimApp.cpp +++ b/Apps/CellSim/CellSimApp.cpp @@ -120,11 +120,11 @@ namespace CS { if(InitModules() != EXIT_SUCCESS) { - appStartSuccess = false; + _initSuccess = false; } else { - appStartSuccess = true; + _initSuccess = true; AddObjects(); AddCellWorld(); } diff --git a/Apps/CellSim/CellSimApp.hpp b/Apps/CellSim/CellSimApp.hpp index 0341d9f8..98e02088 100644 --- a/Apps/CellSim/CellSimApp.hpp +++ b/Apps/CellSim/CellSimApp.hpp @@ -15,8 +15,8 @@ namespace CS Engine::Scope _cellManager; Engine::Scope _interface; - void LoadResources() final; - Engine::uint32 InitModules() final; + void LoadResources() override; + Engine::uint32 InitModules() override; void AddObjects(); void AddCellWorld(); void HandleCellSpawn(); @@ -24,7 +24,7 @@ namespace CS public: CellSimApp(); - ~CellSimApp() final; - void Update() final; + ~CellSimApp() override; + void Update() override; }; } \ No newline at end of file diff --git a/Apps/CellSim/CellSimEntryPoint.cpp b/Apps/CellSim/CellSimEntryPoint.cpp index 3c6b9eaa..0982eaee 100644 --- a/Apps/CellSim/CellSimEntryPoint.cpp +++ b/Apps/CellSim/CellSimEntryPoint.cpp @@ -6,11 +6,13 @@ int main() CS::CellSimApp cellSimApp; //Check for success - if(cellSimApp.appStartSuccess) + if(cellSimApp.GetInitSuccess()) { //Start app while(cellSimApp.IsRunning()) + { cellSimApp.Update(); + } } else { diff --git a/Apps/GreenWorld/GreenWorldApp.cpp b/Apps/GreenWorld/GreenWorldApp.cpp index 2105da7f..98a87a75 100644 --- a/Apps/GreenWorld/GreenWorldApp.cpp +++ b/Apps/GreenWorld/GreenWorldApp.cpp @@ -203,11 +203,11 @@ namespace GW { if(InitModules() != EXIT_SUCCESS) { - appStartSuccess = false; + _initSuccess = false; } else { - appStartSuccess = true; + _initSuccess = true; AddObjects(); AddSprites(); } diff --git a/Apps/GreenWorld/GreenWorldApp.hpp b/Apps/GreenWorld/GreenWorldApp.hpp index 80552577..a1b2b5c8 100644 --- a/Apps/GreenWorld/GreenWorldApp.hpp +++ b/Apps/GreenWorld/GreenWorldApp.hpp @@ -15,14 +15,14 @@ namespace GW Engine::Scope _interface; Engine::Scope _audio; - void LoadResources() final; - Engine::uint32 InitModules() final; + void LoadResources() override; + Engine::uint32 InitModules() override; void AddObjects(); void AddSprites(); public: GreenWorldApp(); - ~GreenWorldApp() final; - void Update() final; + ~GreenWorldApp() override; + void Update() override; }; } \ No newline at end of file diff --git a/Apps/GreenWorld/GreenWorldEntryPoint.cpp b/Apps/GreenWorld/GreenWorldEntryPoint.cpp index 1bba0575..4782281f 100644 --- a/Apps/GreenWorld/GreenWorldEntryPoint.cpp +++ b/Apps/GreenWorld/GreenWorldEntryPoint.cpp @@ -6,11 +6,13 @@ int main() GW::GreenWorldApp greenWorldApp; //Check for success - if(greenWorldApp.appStartSuccess) + if(greenWorldApp.GetInitSuccess()) { //Start app while(greenWorldApp.IsRunning()) + { greenWorldApp.Update(); + } } else { diff --git a/Apps/Liquefied/LiquefiedApp.cpp b/Apps/Liquefied/LiquefiedApp.cpp index 73d39641..7813dff4 100644 --- a/Apps/Liquefied/LiquefiedApp.cpp +++ b/Apps/Liquefied/LiquefiedApp.cpp @@ -26,7 +26,7 @@ namespace Liq //Load shaders and textures LoadResources(); - //Create PixelRenderer + //Create pixel renderer _pixelRenderer = Engine::RenderManager::AddPixelRenderer("BG_Texture", "SpriteShader"); //Create UI @@ -41,11 +41,11 @@ namespace Liq { if(InitModules() != EXIT_SUCCESS) { - appStartSuccess = false; + _initSuccess = false; } else { - appStartSuccess = true; + _initSuccess = true; } } @@ -79,26 +79,20 @@ namespace Liq Engine::RenderManager::RenderPixels(); //Test of the pixel renderer - if(Engine::Window::GetFrameCounter() == 75) + if(Engine::Window::GetFrameCounter() == 0) { - _pixelRenderer->Set(0, 0, COLOR_WHITE); - _pixelRenderer->Set(1919, 0, COLOR_RED); - _pixelRenderer->Set(0, 1079, COLOR_BLUE); - _pixelRenderer->Set(1919, 1079, COLOR_GREEN); + _pixelRenderer->SetScreen(COLOR_WHITE); } - else if(Engine::Window::GetFrameCounter() == 0) + else if(Engine::Window::GetFrameCounter() == 80) { - _pixelRenderer->Reset(0, 0); - _pixelRenderer->Reset(1919, 0); - _pixelRenderer->Reset(0, 1079); - _pixelRenderer->Reset(1919, 1079); + _pixelRenderer->ClearScreen(); } } { Engine::PROFILE_SCOPE("Render UI"); - //_interface->AddElements(); + _interface->AddElements(); _interface->Render(); } diff --git a/Apps/Liquefied/LiquefiedApp.hpp b/Apps/Liquefied/LiquefiedApp.hpp index 4a94f9a0..6266ef89 100644 --- a/Apps/Liquefied/LiquefiedApp.hpp +++ b/Apps/Liquefied/LiquefiedApp.hpp @@ -11,12 +11,12 @@ namespace Liq Engine::PixelRenderer* _pixelRenderer = nullptr; Engine::Scope _interface; - void LoadResources() final; - Engine::uint32 InitModules() final; + void LoadResources() override; + Engine::uint32 InitModules() override; public: LiquefiedApp(); - ~LiquefiedApp() final; - void Update() final; + ~LiquefiedApp() override; + void Update() override; }; } \ No newline at end of file diff --git a/Apps/Liquefied/LiquefiedEntryPoint.cpp b/Apps/Liquefied/LiquefiedEntryPoint.cpp index 666436ce..2d3b45cf 100644 --- a/Apps/Liquefied/LiquefiedEntryPoint.cpp +++ b/Apps/Liquefied/LiquefiedEntryPoint.cpp @@ -6,11 +6,13 @@ int main() Liq::LiquefiedApp liquefiedApp; //Check for success - if(liquefiedApp.appStartSuccess) + if(liquefiedApp.GetInitSuccess()) { //Start app while(liquefiedApp.IsRunning()) + { liquefiedApp.Update(); + } } else { diff --git a/Engine/Application/App.cpp b/Engine/Application/App.cpp index ccd9331e..8bb3359a 100644 --- a/Engine/Application/App.cpp +++ b/Engine/Application/App.cpp @@ -6,7 +6,12 @@ namespace Engine App::~App() = default; - bool App::IsRunning() + bool App::GetInitSuccess() const + { + return _initSuccess; + } + + bool App::IsRunning() const { return Engine::Window::IsRunning(); } diff --git a/Engine/Application/App.hpp b/Engine/Application/App.hpp index bf761fe7..c971fae4 100644 --- a/Engine/Application/App.hpp +++ b/Engine/Application/App.hpp @@ -8,13 +8,16 @@ namespace Engine class App { protected: + bool _initSuccess = false; + virtual void LoadResources() = 0; virtual uint32 InitModules() = 0; public: - bool appStartSuccess; - virtual ~App() = 0; + virtual ~App() = 0; virtual void Update() = 0; - static bool IsRunning(); + + [[nodiscard]] bool GetInitSuccess() const; + [[nodiscard]] bool IsRunning() const; }; } \ No newline at end of file diff --git a/Engine/Rendering/Renderer/CellRenderer.hpp b/Engine/Rendering/Renderer/CellRenderer.hpp index 1c53c924..d11699a3 100644 --- a/Engine/Rendering/Renderer/CellRenderer.hpp +++ b/Engine/Rendering/Renderer/CellRenderer.hpp @@ -29,13 +29,13 @@ namespace Engine std::array _colorStorage; CellRenderer(Shader* shader, const glm::vec3& worldSpawnPos); - ~CellRenderer() final = default; + ~CellRenderer() override = default; void InitGpuStorage(); void UploadGPUStorage(); public: - void Flush(Renderer* renderer) final; + void Flush(Renderer* renderer) override; void UpdateGPUStorage(uint32 index, const glm::u32vec3& cellPos, const glm::vec3& cellColor); }; } \ No newline at end of file diff --git a/Engine/Rendering/Renderer/ParticleRenderer.hpp b/Engine/Rendering/Renderer/ParticleRenderer.hpp index bafcbe41..34f118b4 100644 --- a/Engine/Rendering/Renderer/ParticleRenderer.hpp +++ b/Engine/Rendering/Renderer/ParticleRenderer.hpp @@ -41,7 +41,7 @@ namespace Engine uint32 count, float size, float speed, float gravityCompliance, float lifeLength, float respawnThreshold, Texture* textureAtlas, Shader* shader, const glm::vec3& position ); - ~ParticleRenderer() final; + ~ParticleRenderer() override; void InitGpuStorage(); void UpdateGpuStorage(); @@ -49,6 +49,6 @@ namespace Engine glm::mat4 GetModelViewMatrix(Particle* particle); public: - void Flush(Renderer* sceneRenderer) final; + void Flush(Renderer* sceneRenderer) override; }; } \ No newline at end of file diff --git a/Engine/Rendering/Renderer/PixelRenderer.cpp b/Engine/Rendering/Renderer/PixelRenderer.cpp index e97f52c8..eabc5a9b 100644 --- a/Engine/Rendering/Renderer/PixelRenderer.cpp +++ b/Engine/Rendering/Renderer/PixelRenderer.cpp @@ -7,10 +7,12 @@ namespace Engine // ----- Private ----- PixelRenderer::PixelRenderer(const std::string& bgTexture, const std::string& shader) - : _canvasSprite(ResourceManager::GetTexture(bgTexture), + : _width(ResourceManager::GetTexture(bgTexture)->GetWidth()), + _height(ResourceManager::GetTexture(bgTexture)->GetHeight()), + _canvasSprite(ResourceManager::GetTexture(bgTexture), ResourceManager::GetShader(shader), COLOR_WHITE, - glm::vec2((float)WindowParams::WIDTH, (float)WindowParams::HEIGHT)) + glm::vec2(_width, _height)) { Logger::Info("Created", "Renderer", __func__); } @@ -21,6 +23,9 @@ namespace Engine { GLRenderSettings::DisableCulling(); + //Commit texture changes + _canvasSprite.GetTexture()->CommitModifications(); + //Render sprite RenderStatistics::drawnVertices += _canvasSprite.Draw(); RenderStatistics::drawCalls++; @@ -41,4 +46,26 @@ namespace Engine { _canvasSprite.GetTexture()->ResetTextureModification(x, y); } + + void PixelRenderer::SetScreen(const glm::vec3& color) const + { + for(uint32 x = 0; x < _width; x++) + { + for(uint32 y = 0; y < _height; y++) + { + Set(x, y, color); + } + } + } + + void PixelRenderer::ClearScreen() const + { + for(uint32 x = 0; x < _width; x++) + { + for(uint32 y = 0; y < _height; y++) + { + Reset(x, y); + } + } + } } diff --git a/Engine/Rendering/Renderer/PixelRenderer.hpp b/Engine/Rendering/Renderer/PixelRenderer.hpp index 309d02cd..d98a66e4 100644 --- a/Engine/Rendering/Renderer/PixelRenderer.hpp +++ b/Engine/Rendering/Renderer/PixelRenderer.hpp @@ -17,13 +17,16 @@ namespace Engine friend class RenderManager; private: + uint32 _width, _height; Sprite _canvasSprite; PixelRenderer(const std::string& bgTexture, const std::string& shader); public: - void Flush(Renderer* renderer) final; + void Flush(Renderer* renderer) override; void Set(uint32 x, uint32 y, const glm::vec3& color) const; void Reset(uint32 x, uint32 y) const; + void SetScreen(const glm::vec3& color) const; + void ClearScreen() const; }; } \ No newline at end of file diff --git a/Engine/Rendering/Renderer/SceneRenderer.hpp b/Engine/Rendering/Renderer/SceneRenderer.hpp index 7c298825..b81353bc 100644 --- a/Engine/Rendering/Renderer/SceneRenderer.hpp +++ b/Engine/Rendering/Renderer/SceneRenderer.hpp @@ -33,14 +33,14 @@ namespace Engine Shader *_terrainShader, *_modelShader, *_waterShader; SceneRenderer(); - ~SceneRenderer() final; + ~SceneRenderer() override; void FlushModel(Model* model, Shader* shader); void FlushWater(); void UpdateMoveFactor(); public: - void Flush(Renderer* renderer) final; + void Flush(Renderer* renderer) override; void FlushModels(Shader* shader); void FlushCubemap(); void FlushTerrain(); diff --git a/Engine/Rendering/Renderer/ShadowRenderer.hpp b/Engine/Rendering/Renderer/ShadowRenderer.hpp index 16e2363f..1bfee1a1 100644 --- a/Engine/Rendering/Renderer/ShadowRenderer.hpp +++ b/Engine/Rendering/Renderer/ShadowRenderer.hpp @@ -29,7 +29,7 @@ namespace Engine void EndFrame(); public: - void Flush(Renderer* sceneRenderer) final; + void Flush(Renderer* sceneRenderer) override; [[nodiscard]] Texture* GetDepthTexture() const; [[nodiscard]] glm::mat4 GetLightProjection() const; }; diff --git a/Engine/Rendering/Renderer/SpriteRenderer.hpp b/Engine/Rendering/Renderer/SpriteRenderer.hpp index 382917fb..210d6cc0 100644 --- a/Engine/Rendering/Renderer/SpriteRenderer.hpp +++ b/Engine/Rendering/Renderer/SpriteRenderer.hpp @@ -22,7 +22,7 @@ namespace Engine SpriteRenderer(); public: - void Flush(Renderer* renderer) final; + void Flush(Renderer* renderer) override; void AddSprite(const glm::vec2& size, const glm::vec2& pos, Texture* texture, Shader* shader); }; } \ No newline at end of file diff --git a/Engine/Rendering/Renderer/WaterRenderer.hpp b/Engine/Rendering/Renderer/WaterRenderer.hpp index ad130a49..9c494c9b 100644 --- a/Engine/Rendering/Renderer/WaterRenderer.hpp +++ b/Engine/Rendering/Renderer/WaterRenderer.hpp @@ -34,7 +34,7 @@ namespace Engine void RenderRefractionFrame(SceneRenderer* sceneRenderer); public: - void Flush(Renderer* sceneRenderer) final; + void Flush(Renderer* sceneRenderer) override; [[nodiscard]] Texture* GetReflectTexture() const; [[nodiscard]] Texture* GetRefractTexture() const; diff --git a/Engine/Rendering/Resources/Texture.cpp b/Engine/Rendering/Resources/Texture.cpp index 6e1545cd..88356d4b 100644 --- a/Engine/Rendering/Resources/Texture.cpp +++ b/Engine/Rendering/Resources/Texture.cpp @@ -175,9 +175,6 @@ namespace Engine *(_imgBuffer + (y * _width * 3) + (x * 3) + 0) = (unsigned char)(color.x * 255); *(_imgBuffer + (y * _width * 3) + (x * 3) + 1) = (unsigned char)(color.y * 255); *(_imgBuffer + (y * _width * 3) + (x * 3) + 2) = (unsigned char)(color.z * 255); - - Bind(); - GLCall(glTexImage2D(GL_TEXTURE_2D, 0, _format, _width, _height, 0, _format, GL_UNSIGNED_BYTE, _imgBuffer)); } } else @@ -195,9 +192,6 @@ namespace Engine *(_imgBuffer + (y * _width * 3) + (x * 3) + 0) = *(_backupBuffer + (y * _width * 3) + (x * 3) + 0); *(_imgBuffer + (y * _width * 3) + (x * 3) + 1) = *(_backupBuffer + (y * _width * 3) + (x * 3) + 1); *(_imgBuffer + (y * _width * 3) + (x * 3) + 2) = *(_backupBuffer + (y * _width * 3) + (x * 3) + 2); - - Bind(); - GLCall(glTexImage2D(GL_TEXTURE_2D, 0, _format, _width, _height, 0, _format, GL_UNSIGNED_BYTE, _imgBuffer)); } } else @@ -206,6 +200,23 @@ namespace Engine } } + void Texture::CommitModifications() const + { + Bind(); + GLCall(glTexImage2D(GL_TEXTURE_2D, 0, _format, _width, _height, 0, _format, GL_UNSIGNED_BYTE, _imgBuffer)); + Unbind(); + } + + uint32 Texture::GetWidth() const + { + return (uint32)_width; + } + + uint32 Texture::GetHeight() const + { + return (uint32)_height; + } + uint32 Texture::GetTextureID() const { return _textureID; diff --git a/Engine/Rendering/Resources/Texture.hpp b/Engine/Rendering/Resources/Texture.hpp index ab53ba7d..9af61599 100644 --- a/Engine/Rendering/Resources/Texture.hpp +++ b/Engine/Rendering/Resources/Texture.hpp @@ -40,7 +40,10 @@ namespace Engine void AddBorderColor() const; void ModifyTexture(uint32 x, uint32 y, const glm::vec3& color); void ResetTextureModification(uint32 x, uint32 y); + void CommitModifications() const; + [[nodiscard]] uint32 GetWidth() const; + [[nodiscard]] uint32 GetHeight() const; [[nodiscard]] uint32 GetTextureID() const; [[nodiscard]] uint32 GetNumberOfRows() const; };