diff --git a/Assets/Shaders/UI_FS.glsl b/Assets/Shaders/UI_FS.glsl index ea0bf7e9..30b59e48 100644 --- a/Assets/Shaders/UI_FS.glsl +++ b/Assets/Shaders/UI_FS.glsl @@ -39,8 +39,7 @@ void main() fragColor = texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv); if (fragColor.a < 0.01f) { - fragColor = vec4(1.0f, 0.0f, 0.0f, 1.0f); - // discard; + discard; } fragColor.a = MatProp.data[In2.materialIndex].alpha; diff --git a/Assets/Shaders/UI_FS.shshaderb b/Assets/Shaders/UI_FS.shshaderb index f67223b9..92f4ed4e 100644 Binary files a/Assets/Shaders/UI_FS.shshaderb and b/Assets/Shaders/UI_FS.shshaderb differ diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.cpp b/SHADE_Engine/src/Camera/SHCameraComponent.cpp index 17378d79..ef3276a7 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.cpp +++ b/SHADE_Engine/src/Camera/SHCameraComponent.cpp @@ -10,8 +10,8 @@ namespace SHADE { SHCameraComponent::SHCameraComponent() :yaw(0.0f), pitch(0.0f), roll(0.0f) - , width(1920.0f), height(1080.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(0.5f) - , perspProj(true), dirtyView(true), dirtyProj(true) + , width(1920.0f), zNear(0.01f), zFar(10000.0f), fov(90.0f), movementSpeed(1.0f), turnSpeed(0.5f) + , perspProj(true), dirtyView(true), dirtyProj(true), followScreenAR(true) , viewMatrix(), perspProjMatrix(), orthoProjMatrix() , position(), offset() { @@ -122,11 +122,6 @@ namespace SHADE } - void SHCameraComponent::SetHeight(float height) noexcept - { - this->height = height; - dirtyProj = true; - } void SHCameraComponent::SetNear(float znear) noexcept { @@ -176,10 +171,7 @@ namespace SHADE return width; } - float SHCameraComponent::GetHeight() const noexcept - { - return height; - } + float SHCameraComponent::GetNear() const noexcept { @@ -191,10 +183,7 @@ namespace SHADE return zFar; } - float SHCameraComponent::GetAspectRatio() const noexcept - { - return width/height; - } + float SHCameraComponent::GetFOV() const noexcept { @@ -251,11 +240,11 @@ RTTR_REGISTRATION .property("Yaw", &SHCameraComponent::GetYaw, &SHCameraComponent::SetYaw) .property("Roll", &SHCameraComponent::GetRoll, &SHCameraComponent::SetRoll) .property("Width", &SHCameraComponent::GetWidth, &SHCameraComponent::SetWidth) - .property("Height", &SHCameraComponent::GetHeight, &SHCameraComponent::SetHeight) .property("Near", &SHCameraComponent::GetNear, &SHCameraComponent::SetNear) .property("Far", &SHCameraComponent::GetFar, &SHCameraComponent::SetFar) .property("Perspective", &SHCameraComponent::GetIsPerspective, &SHCameraComponent::SetIsPerspective) - .property("FOV",&SHCameraComponent::GetFOV, &SHCameraComponent::SetFOV); + .property("FOV", &SHCameraComponent::GetFOV, &SHCameraComponent::SetFOV); + } diff --git a/SHADE_Engine/src/Camera/SHCameraComponent.h b/SHADE_Engine/src/Camera/SHCameraComponent.h index b0999fe9..b1b069c3 100644 --- a/SHADE_Engine/src/Camera/SHCameraComponent.h +++ b/SHADE_Engine/src/Camera/SHCameraComponent.h @@ -19,7 +19,6 @@ namespace SHADE float roll; float width; - float height; float zNear; float zFar; float fov; @@ -27,7 +26,6 @@ namespace SHADE bool dirtyView; bool dirtyProj; - SHMatrix viewMatrix; SHMatrix perspProjMatrix; SHMatrix orthoProjMatrix; @@ -45,6 +43,8 @@ namespace SHADE SHCameraComponent(); virtual ~SHCameraComponent(); + bool followScreenAR; + //Getters and setters. void SetYaw(float yaw) noexcept; @@ -57,7 +57,6 @@ namespace SHADE void SetPosition(SHVec3 pos) noexcept; void SetWidth(float width) noexcept; - void SetHeight(float height) noexcept; void SetNear(float znear) noexcept; void SetFar(float zfar) noexcept; void SetFOV(float fov) noexcept; @@ -70,11 +69,9 @@ namespace SHADE float GetRoll() const noexcept; float GetWidth() const noexcept; - float GetHeight() const noexcept; float GetNear() const noexcept; float GetFar() const noexcept; - float GetAspectRatio() const noexcept; float GetFOV() const noexcept; bool GetIsPerspective() const noexcept; diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.cpp b/SHADE_Engine/src/Camera/SHCameraDirector.cpp index 7d5ec6f2..15255ae8 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.cpp +++ b/SHADE_Engine/src/Camera/SHCameraDirector.cpp @@ -99,13 +99,13 @@ namespace SHADE return 0.0f; } - float SHCameraDirector::GetHeight() noexcept - { - SHCameraComponent* camComponent = GetMainCameraComponent(); - if (camComponent) - return camComponent->GetHeight(); - else - return 0.0f; - } + //float SHCameraDirector::GetHeight() noexcept + //{ + // SHCameraComponent* camComponent = GetMainCameraComponent(); + // if (camComponent) + // return camComponent->GetHeight(); + // else + // return 0.0f; + //} } diff --git a/SHADE_Engine/src/Camera/SHCameraDirector.h b/SHADE_Engine/src/Camera/SHCameraDirector.h index 381531d6..48e85fc2 100644 --- a/SHADE_Engine/src/Camera/SHCameraDirector.h +++ b/SHADE_Engine/src/Camera/SHCameraDirector.h @@ -31,7 +31,7 @@ namespace SHADE SHMatrix const& GetOrthoMatrix() noexcept; SHMatrix const& GetPerspectiveMatrix() noexcept; float GetWidth() noexcept; - float GetHeight() noexcept; + //float GetHeight() noexcept; private: SHMatrix viewMatrix; diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.cpp b/SHADE_Engine/src/Camera/SHCameraSystem.cpp index 59ba7ce9..e577207a 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.cpp +++ b/SHADE_Engine/src/Camera/SHCameraSystem.cpp @@ -116,7 +116,6 @@ namespace SHADE editorCamera.SetYaw(0.0f); editorCamera.SetRoll(0.0f); editorCamera.SetWidth(1080.0f); - editorCamera.SetHeight(720.0f); editorCamera.SetFar(10000000.0f); editorCamera.movementSpeed = 2.0f; editorCamera.perspProj = true; @@ -144,18 +143,7 @@ namespace SHADE //std::cout << EVENT_DATA->resizeWidth << std::endl; //std::cout << EVENT_DATA->resizeHeight << std::endl; - - - for (auto director : directorHandleList) - { - auto camera = SHComponentManager::GetComponent_s(director->mainCameraEID); - if (camera) - { - camera->SetWidth(EVENT_DATA->resizeWidth); - camera->SetHeight(EVENT_DATA->resizeHeight); - } - - } + screenAspectRatio = (float)EVENT_DATA->resizeWidth / (float)EVENT_DATA->resizeHeight; return eventPtr->handle; @@ -340,7 +328,7 @@ namespace SHADE if (camera.dirtyProj == true) { //Perspective projection matrix. - const float ASPECT_RATIO = (camera.GetAspectRatio()); + const float ASPECT_RATIO = (screenAspectRatio); const float TAN_HALF_FOV = tan(SHMath::DegreesToRadians(camera.fov) * 0.5f); camera.perspProjMatrix = SHMatrix::Identity; camera.perspProjMatrix(0, 0) = 1.0f / (ASPECT_RATIO * TAN_HALF_FOV); @@ -357,7 +345,7 @@ namespace SHADE const float right = camera.GetWidth() * 0.5f; const float left = -right; - const float top = camera.GetHeight() * 0.5f; + const float top = camera.GetWidth() / screenAspectRatio * 0.5f; const float btm = -top; const float n = camera.GetNear(); const float f = camera.GetFar(); @@ -574,11 +562,11 @@ namespace SHADE auto editor = SHSystemManager::GetSystem(); if (editor->editorState != SHEditor::State::PLAY) { - return SHVec2{ GetEditorCamera()->GetWidth(), GetEditorCamera()->GetHeight() }; + return SHVec2{ GetEditorCamera()->GetWidth(), GetEditorCamera()->GetWidth() / screenAspectRatio }; } else { - return SHVec2{ GetDirector(index)->GetWidth(),GetDirector(index)->GetHeight() }; + return SHVec2{ GetDirector(index)->GetWidth(),GetDirector(index)->GetWidth() / screenAspectRatio }; } #else diff --git a/SHADE_Engine/src/Camera/SHCameraSystem.h b/SHADE_Engine/src/Camera/SHCameraSystem.h index 4d6476bf..92728537 100644 --- a/SHADE_Engine/src/Camera/SHCameraSystem.h +++ b/SHADE_Engine/src/Camera/SHCameraSystem.h @@ -21,6 +21,8 @@ namespace SHADE SHCameraComponent editorCamera; SHCameraArmComponent editorCameraArm; + float screenAspectRatio{16.0f/9.0f}; + SHResourceLibrary directorLibrary; std::vector directorHandleList; diff --git a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp index 8c32b1c5..e571adb4 100644 --- a/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp +++ b/SHADE_Engine/src/Editor/EditorWindow/ViewportWindow/SHEditorViewport.cpp @@ -59,7 +59,7 @@ namespace SHADE camSystem->UpdateEditorArm(SHFrameRateController::GetRawDeltaTime(), shouldUpdateCamArm, targetPos); ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f)); - + ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(0.0f, 0.0f, 0.0f, 1.0f)); if (Begin()) { ImGuizmo::SetDrawlist(); @@ -101,6 +101,7 @@ namespace SHADE } } } + ImGui::PopStyleColor(); ImGuizmo::SetRect(beginCursorPos.x, beginCursorPos.y, beginContentRegionAvailable.x, beginContentRegionAvailable.y); if(editor->editorState != SHEditor::State::PLAY) transformGizmo.Draw(); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 883b5af2..a6a6582c 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -1178,7 +1178,7 @@ namespace SHADE auto cameraSystem = SHSystemManager::GetSystem(); #ifdef SHEDITOR cameraSystem->GetEditorCamera()->SetWidth(static_cast(resizeWidth)); - cameraSystem->GetEditorCamera()->SetHeight(static_cast(resizeHeight)); + //cameraSystem->GetEditorCamera()->SetAspectRatio(static_cast(resizeWidth) / static_cast(resizeHeight)); // Create new event and broadcast it SHWindowResizeEvent newEvent; @@ -1188,7 +1188,12 @@ namespace SHADE SHEventManager::BroadcastEvent(newEvent, SH_WINDOW_RESIZE_EVENT); #else + // Create new event and broadcast it + SHWindowResizeEvent newEvent; + newEvent.resizeWidth = resizeWidth; + newEvent.resizeHeight = resizeHeight; + SHEventManager::BroadcastEvent(newEvent, SH_WINDOW_RESIZE_EVENT); #endif } diff --git a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp index 74128ec8..89cd2927 100644 --- a/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp +++ b/SHADE_Engine/src/Graphics/Renderpass/SHVkRenderpass.cpp @@ -40,7 +40,7 @@ namespace SHADE if (SHVkUtil::IsDepthStencilAttachment(vkDescriptions[i].format)) clearColors[i].depthStencil = vk::ClearDepthStencilValue(1.0f, 0); else - clearColors[i].color = { {{0.0f, 0.0f, 0.0f, 1.0f}} }; + clearColors[i].color = { {{0.0f, 0.0f, 0.0f, 0.0f}} }; } diff --git a/SHADE_Engine/src/UI/SHButtonComponent.cpp b/SHADE_Engine/src/UI/SHButtonComponent.cpp index cbc36ce3..5cc31841 100644 --- a/SHADE_Engine/src/UI/SHButtonComponent.cpp +++ b/SHADE_Engine/src/UI/SHButtonComponent.cpp @@ -28,16 +28,19 @@ namespace SHADE void SHButtonComponent::SetDefaultTexture(AssetID texture) noexcept { defaultTexture = texture; + SHResourceManager::LoadOrGet(texture); } void SHButtonComponent::SetHoveredTexture(AssetID texture) noexcept { hoveredTexture = texture; + SHResourceManager::LoadOrGet(texture);\ } void SHButtonComponent::SetClickedTexture(AssetID texture) noexcept { clickedTexture = texture; + SHResourceManager::LoadOrGet(texture); } diff --git a/SHADE_Engine/src/UI/SHToggleButtonComponent.cpp b/SHADE_Engine/src/UI/SHToggleButtonComponent.cpp index 1ae0e9e0..546a2a26 100644 --- a/SHADE_Engine/src/UI/SHToggleButtonComponent.cpp +++ b/SHADE_Engine/src/UI/SHToggleButtonComponent.cpp @@ -1,6 +1,7 @@ #include "SHpch.h" #include "SHToggleButtonComponent.h" - +#include "Resource/SHResourceManager.h" +#include "Graphics/MiddleEnd/Textures/SHTextureLibrary.h" namespace SHADE { @@ -28,11 +29,13 @@ namespace SHADE void SHToggleButtonComponent::SetDefaultTexture(AssetID texture) noexcept { defaultTexture = texture; + SHResourceManager::LoadOrGet(texture); } void SHToggleButtonComponent::SetToggledTexture(AssetID texture) noexcept { toggledTexture = texture; + SHResourceManager::LoadOrGet(texture); } void SHToggleButtonComponent::SetValue(bool value) noexcept diff --git a/SHADE_Engine/src/UI/SHUISystem.cpp b/SHADE_Engine/src/UI/SHUISystem.cpp index 7c5c1a0a..e27c00a2 100644 --- a/SHADE_Engine/src/UI/SHUISystem.cpp +++ b/SHADE_Engine/src/UI/SHUISystem.cpp @@ -313,8 +313,8 @@ namespace SHADE { auto material = renderable->GetModifiableMaterial(); comp.currentTexture = textureID; - material->SetProperty("data.textureIndex", SHResourceManager::LoadOrGet(textureID)->TextureArrayIndex); - loadTexture = true; + material->SetProperty("data.textureIndex", SHResourceManager::Get(textureID)->TextureArrayIndex); + } @@ -368,8 +368,8 @@ namespace SHADE { auto material = renderable->GetModifiableMaterial(); comp.currentTexture = textureID; - material->SetProperty("data.textureIndex", SHResourceManager::LoadOrGet(textureID)); - loadTexture = true; + material->SetProperty("data.textureIndex", SHResourceManager::Get(textureID)->TextureArrayIndex); + } @@ -381,6 +381,8 @@ namespace SHADE { SHUISystem* system = (SHUISystem*)GetSystem(); auto& dense = SHComponentManager::GetDense(); + //We ensure that the textures are loaded before we do the update. + SHResourceManager::FinaliseChanges(); for (auto& comp : dense) { if (SHSceneManager::CheckNodeAndComponentsActive(comp.GetEID())) @@ -393,11 +395,6 @@ namespace SHADE if (SHSceneManager::CheckNodeAndComponentsActive(comp.GetEID())) system->UpdateToggleButtonComponent(comp); } - if (system->loadTexture == true) - { - system->loadTexture = false; - SHResourceManager::FinaliseChanges(); - } } SHVec2 SHUISystem::CanvasToScreenPoint(SHVec2& const canvasPoint, bool normalized) noexcept diff --git a/SHADE_Managed/src/Components/Camera.cxx b/SHADE_Managed/src/Components/Camera.cxx index 0d0dbced..4640c17a 100644 --- a/SHADE_Managed/src/Components/Camera.cxx +++ b/SHADE_Managed/src/Components/Camera.cxx @@ -50,15 +50,8 @@ namespace SHADE { GetNativeComponent()->SetWidth(val); } - float Camera::Height::get() - { - return (GetNativeComponent()->GetHeight()); - } + - void Camera::Height::set(float val) - { - GetNativeComponent()->SetHeight(val); - } float Camera::Near::get() { return (GetNativeComponent()->GetNear()); diff --git a/SHADE_Managed/src/Components/Camera.hxx b/SHADE_Managed/src/Components/Camera.hxx index c6afeb6d..c793f1ed 100644 --- a/SHADE_Managed/src/Components/Camera.hxx +++ b/SHADE_Managed/src/Components/Camera.hxx @@ -35,11 +35,7 @@ namespace SHADE float get(); void set(float val); } - property float Height - { - float get(); - void set(float val); - } + property float Near { float get(); @@ -60,6 +56,7 @@ namespace SHADE Vector3 get(); void set(Vector3 val); } + void SetMainCamera(size_t directorIndex);