mirror of
https://github.com/antopilo/Nuake.git
synced 2025-12-30 21:49:06 +03:00
Proper viewport disabling with material editor window
This commit is contained in:
@@ -36,7 +36,7 @@ PSOutput main(PSInput input)
|
||||
{
|
||||
int depthTexture = pushConstants.DepthTextureID;
|
||||
float upSampledDepth = textures[depthTexture].Sample(mySampler[0], input.UV).r;
|
||||
float3 upSampledColor = textures[pushConstants.VolumetricTextureID].Sample(mySampler[0], input.UV).rgb;
|
||||
float3 upSampledColor = textures[pushConstants.VolumetricTextureID].Sample(mySampler[1], input.UV).rgb;
|
||||
float3 color = 0.0f.xxx;
|
||||
float totalWeight = 0.0f;
|
||||
|
||||
@@ -53,7 +53,7 @@ PSOutput main(PSInput input)
|
||||
{
|
||||
float2 uvOffset = float2(offsets[i].x * 4.0, offsets[i].y * 4.0) ;
|
||||
uvOffset = PixelToUV(uvOffset, textures[pushConstants.DepthTextureID]);
|
||||
float3 downscaledColor = textures[pushConstants.VolumetricTextureID].Sample(mySampler[0], input.UV + uvOffset).rgb;
|
||||
float3 downscaledColor = textures[pushConstants.VolumetricTextureID].Sample(mySampler[1], input.UV + uvOffset).rgb;
|
||||
float downscaledDepth = textures[pushConstants.DepthTextureID].Sample(mySampler[0], input.UV + uvOffset).r;
|
||||
|
||||
float currentWeight = 1.0f;
|
||||
|
||||
@@ -21,6 +21,8 @@ public:
|
||||
const UUID viewId = componentPtr->CameraInstance->ID;
|
||||
|
||||
previewViewport = vkRenderer.CreateViewport(viewId, { 200, 200 });
|
||||
previewViewport->SetDebugName("CameraPreviewViewport");
|
||||
|
||||
vkRenderer.RegisterSceneViewport(scene->Shared(), previewViewport->GetID());
|
||||
}
|
||||
if (componentPtr == nullptr)
|
||||
|
||||
@@ -26,6 +26,9 @@ enum class Shapes
|
||||
|
||||
Shapes currentShape = Shapes::Sphere;
|
||||
|
||||
Ref<Nuake::Viewport> MaterialEditor::SceneViewport = nullptr;
|
||||
Ref<Nuake::Scene> MaterialEditor::PreviewScene = nullptr;
|
||||
|
||||
void MaterialEditor::Enable()
|
||||
{
|
||||
SceneViewport->SetActive(true);
|
||||
@@ -40,33 +43,61 @@ MaterialEditor::MaterialEditor()
|
||||
{
|
||||
using namespace Nuake;
|
||||
|
||||
PreviewScene = CreateRef<Nuake::Scene>();
|
||||
PreviewScene->GetEnvironment()->mVolumetric->SetFogAmount(1.0f);
|
||||
if (!SceneViewport)
|
||||
{
|
||||
PreviewScene = CreateRef<Nuake::Scene>();
|
||||
PreviewScene->GetEnvironment()->mVolumetric->SetFogAmount(1.0f);
|
||||
|
||||
auto camera = PreviewScene->CreateEntity("Camera");
|
||||
camera.GetComponent<Nuake::TransformComponent>().Translation = Nuake::Vector3(-2, 0, -2);
|
||||
auto& camComponent = camera.AddComponent<Nuake::CameraComponent>();
|
||||
camComponent.CameraInstance->Fov = 44.0f;
|
||||
auto light = PreviewScene->CreateEntity("Light");
|
||||
auto& lightC = light.AddComponent<LightComponent>();
|
||||
auto& lightT = light.AddComponent<TransformComponent>();
|
||||
lightC.CastShadows = false;
|
||||
lightC.Type = LightType::Directional;
|
||||
|
||||
auto camera = PreviewScene->CreateEntity("Camera");
|
||||
camera.GetComponent<Nuake::TransformComponent>().Translation = Nuake::Vector3(-2, 0, -2);
|
||||
auto& camComponent = camera.AddComponent<Nuake::CameraComponent>();
|
||||
camComponent.CameraInstance->Fov = 44.0f;
|
||||
auto light = PreviewScene->CreateEntity("Light");
|
||||
auto& lightC = light.AddComponent<LightComponent>();
|
||||
auto& lightT = light.AddComponent<TransformComponent>();
|
||||
lightC.CastShadows = false;
|
||||
lightC.Type = LightType::Directional;
|
||||
glm::vec3 forward = glm::normalize(Vector3(.33, -.33, -.33));
|
||||
glm::vec3 up = glm::vec3(0, 1, 0);
|
||||
|
||||
glm::vec3 forward = glm::normalize(Vector3(.33, -.33, -.33));
|
||||
glm::vec3 up = glm::vec3(0, 1, 0);
|
||||
// Prevent up being colinear with forward
|
||||
if (glm::abs(glm::dot(forward, up)) > 0.999f)
|
||||
up = glm::vec3(1, 0, 0);
|
||||
|
||||
// Prevent up being colinear with forward
|
||||
if (glm::abs(glm::dot(forward, up)) > 0.999f)
|
||||
up = glm::vec3(1, 0, 0);
|
||||
glm::vec3 right = glm::normalize(glm::cross(up, forward));
|
||||
up = glm::cross(forward, right);
|
||||
|
||||
glm::vec3 right = glm::normalize(glm::cross(up, forward));
|
||||
up = glm::cross(forward, right);
|
||||
glm::mat3 rotationMatrix(right, up, forward);
|
||||
|
||||
glm::mat3 rotationMatrix(right, up, forward);
|
||||
//auto& lightT = light.GetComponent<TransformComponent>();
|
||||
lightT.GlobalRotation = glm::quat_cast(rotationMatrix);
|
||||
|
||||
//auto& lightT = light.GetComponent<TransformComponent>();
|
||||
lightT.GlobalRotation = glm::quat_cast(rotationMatrix);
|
||||
auto& vkRenderer = Nuake::VkRenderer::Get();
|
||||
const UUID viewId = camComponent.CameraInstance->ID;
|
||||
|
||||
SceneViewport = vkRenderer.CreateViewport(viewId, { 200, 200 });
|
||||
SceneViewport->SetActive(false);
|
||||
SceneViewport->SetDebugName("MaterialPreview");
|
||||
SceneViewport->GetOnDebugDraw().AddStatic([](DebugCmd& cmd) {
|
||||
Matrix4 transform = Matrix4(1.0f);
|
||||
//cmd.DrawQuad(transform);
|
||||
});
|
||||
SceneViewport->GetOnLineDraw().AddStatic([](DebugLineCmd& cmd) {
|
||||
Matrix4 transform = Matrix4(1.0f);
|
||||
|
||||
auto cam = cmd.GetScene()->GetEntity("Camera");
|
||||
auto& camc = cam.GetComponent<CameraComponent>();
|
||||
auto& cami = camc.CameraInstance;
|
||||
auto proj = cami->GetPerspective();
|
||||
auto view = cami->GetTransform();
|
||||
//cmd.DrawSphere(proj * view * transform, { 1, 0, 0, 1 }, 2.0f, false);
|
||||
});
|
||||
|
||||
//PreviewScene->GetEnvironment()->AmbientColor = { 0, 0, 0, 0 };
|
||||
vkRenderer.RegisterSceneViewport(PreviewScene, SceneViewport->GetID());
|
||||
}
|
||||
|
||||
|
||||
auto sphere = PreviewScene->CreateEntity("Sphere");
|
||||
auto& modelComponent = sphere.AddComponent<Nuake::ModelComponent>();
|
||||
@@ -223,27 +254,7 @@ MaterialEditor::MaterialEditor()
|
||||
ResourceManager::RegisterResource(cubeModel);
|
||||
modelComponent.ModelResource = cubeModel->ID;
|
||||
|
||||
auto& vkRenderer = Nuake::VkRenderer::Get();
|
||||
const UUID viewId = camComponent.CameraInstance->ID;
|
||||
|
||||
SceneViewport = vkRenderer.CreateViewport(viewId, {200, 200});
|
||||
SceneViewport->GetOnDebugDraw().AddStatic([](DebugCmd& cmd) {
|
||||
Matrix4 transform = Matrix4(1.0f);
|
||||
//cmd.DrawQuad(transform);
|
||||
});
|
||||
SceneViewport->GetOnLineDraw().AddStatic([](DebugLineCmd& cmd) {
|
||||
Matrix4 transform = Matrix4(1.0f);
|
||||
|
||||
auto cam = cmd.GetScene()->GetEntity("Camera");
|
||||
auto& camc = cam.GetComponent<CameraComponent>();
|
||||
auto& cami = camc.CameraInstance;
|
||||
auto proj = cami->GetPerspective();
|
||||
auto view = cami->GetTransform();
|
||||
//cmd.DrawSphere(proj * view * transform, { 1, 0, 0, 1 }, 2.0f, false);
|
||||
});
|
||||
|
||||
//PreviewScene->GetEnvironment()->AmbientColor = { 0, 0, 0, 0 };
|
||||
vkRenderer.RegisterSceneViewport(PreviewScene, SceneViewport->GetID());
|
||||
|
||||
}
|
||||
|
||||
void MaterialEditor::Draw(Ref<Nuake::Material> material)
|
||||
|
||||
@@ -4,11 +4,13 @@
|
||||
#include <Nuake/Scene/Scene.h>
|
||||
|
||||
#include "Nuake/Rendering/Vulkan/SceneViewport.h"
|
||||
|
||||
class MaterialEditor
|
||||
{
|
||||
private:
|
||||
Ref<Nuake::Scene> PreviewScene;
|
||||
Ref<Nuake::Viewport> SceneViewport;
|
||||
static Ref<Nuake::Scene> PreviewScene;
|
||||
static Ref<Nuake::Viewport> SceneViewport;
|
||||
|
||||
public:
|
||||
MaterialEditor();
|
||||
~MaterialEditor() = default;
|
||||
|
||||
@@ -2693,6 +2693,12 @@ namespace Nuake {
|
||||
GPUResources& gpu = GPUResources::Get();
|
||||
auto buffers = gpu.GetAllBuffers();
|
||||
|
||||
ImGui::Text("Render Info");
|
||||
|
||||
auto stats = VkRenderer::Get().Stats;
|
||||
ImGui::Text(("View rendered: " + std::to_string(stats.ViewRenderers)).c_str());
|
||||
ImGui::Text(("View skipped: " + std::to_string(stats.ViewRenderSkipped)).c_str());
|
||||
|
||||
ImGui::Text("General Info");
|
||||
|
||||
const size_t textureCount = gpu.GetAllTextures().size();
|
||||
|
||||
@@ -80,6 +80,7 @@ void SceneEditorWindow::Draw()
|
||||
ImGui::DockSpace(dockspaceId, ImGui::GetContentRegionAvail(), ImGuiDockNodeFlags_None, &localSceneEditorClass);
|
||||
for (auto& widget : widgets)
|
||||
{
|
||||
widget->OnVisible();
|
||||
widget->Draw();
|
||||
}
|
||||
|
||||
@@ -100,6 +101,11 @@ void SceneEditorWindow::Draw()
|
||||
else
|
||||
{
|
||||
this->isFocused = false;
|
||||
|
||||
for (auto& widget : widgets)
|
||||
{
|
||||
widget->OnHidden();
|
||||
}
|
||||
}
|
||||
ImGui::End();
|
||||
if (!layoutInitialized)
|
||||
|
||||
@@ -8,6 +8,7 @@ class IEditorWidget
|
||||
{
|
||||
protected:
|
||||
EditorContext& editorContext;
|
||||
bool visible;
|
||||
|
||||
private:
|
||||
std::string widgetName;
|
||||
@@ -22,6 +23,14 @@ public:
|
||||
|
||||
virtual void OnSceneChanged(Ref<Nuake::Scene> scene) {}
|
||||
|
||||
void SetVisible(bool isVisible)
|
||||
{
|
||||
visible = isVisible;
|
||||
}
|
||||
|
||||
virtual void OnVisible() {}
|
||||
virtual void OnHidden() {}
|
||||
|
||||
void DockTo(uint32_t dockId)
|
||||
{
|
||||
ImGui::DockBuilderDockWindow(widgetName.c_str(), dockId);
|
||||
|
||||
@@ -59,6 +59,16 @@ void ViewportWidget::Update(float ts)
|
||||
}
|
||||
}
|
||||
|
||||
void ViewportWidget::OnVisible()
|
||||
{
|
||||
sceneViewport->SetActive(true);
|
||||
}
|
||||
|
||||
void ViewportWidget::OnHidden()
|
||||
{
|
||||
sceneViewport->SetActive(false);
|
||||
}
|
||||
|
||||
void ViewportWidget::Draw()
|
||||
{
|
||||
auto oldTarget = overlayOpacity.TargetValue;
|
||||
@@ -270,6 +280,7 @@ void ViewportWidget::OnSceneChanged(Ref<Nuake::Scene> scene)
|
||||
// Create new viewport with same reoslution
|
||||
const UUID viewId = editorContext.GetScene()->GetCurrentCamera()->ID;
|
||||
auto viewport = vkRenderer.CreateViewport(viewId, currentResolution);
|
||||
viewport->SetDebugName("ViewportWidget(" + scene->GetName() + ")");
|
||||
vkRenderer.RegisterSceneViewport(scene, viewport->GetID());
|
||||
|
||||
sceneViewport = viewport;
|
||||
|
||||
@@ -50,6 +50,9 @@ public:
|
||||
void Draw() override;
|
||||
void OnSceneChanged(Ref<Nuake::Scene> scene) override;
|
||||
|
||||
void OnVisible() override;
|
||||
void OnHidden() override;
|
||||
|
||||
void OnLineDraw(Nuake::DebugLineCmd& lineCmd);
|
||||
void OnDebugDraw(Nuake::DebugCmd& debugCmd);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user