Add Origin Indicator drawable
This commit is contained in:
46
openVulkanoCpp/Scene/Prefabs/OriginIndicatorDrawable.hpp
Normal file
46
openVulkanoCpp/Scene/Prefabs/OriginIndicatorDrawable.hpp
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Scene/Drawable.hpp"
|
||||||
|
#include "Scene/Shader/Shader.hpp"
|
||||||
|
#include "Scene/Node.hpp"
|
||||||
|
|
||||||
|
namespace OpenVulkano::Scene
|
||||||
|
{
|
||||||
|
class OriginIndicatorDrawable final : public Drawable
|
||||||
|
{
|
||||||
|
Shader m_shader;
|
||||||
|
|
||||||
|
public:
|
||||||
|
OriginIndicatorDrawable()
|
||||||
|
: Drawable(DrawEncoder::GetDrawEncoder<OriginIndicatorDrawable>(), DrawPhase::MAIN)
|
||||||
|
{
|
||||||
|
m_shader.cullMode = CullMode::NONE;
|
||||||
|
m_shader.topology = Topology::LINE_LIST;
|
||||||
|
m_shader.AddShaderProgram(ShaderProgramType::VERTEX, "Shader/originIndicator");
|
||||||
|
m_shader.AddShaderProgram(ShaderProgramType::FRAGMENT, "Shader/basic");
|
||||||
|
SetShader(&m_shader);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OriginIndicatorNode final : public Node
|
||||||
|
{
|
||||||
|
OriginIndicatorDrawable drawable;
|
||||||
|
|
||||||
|
public:
|
||||||
|
OriginIndicatorNode(float size = 0.25f) : Node(Math::Utils::scale(Math::Vector3f(size, size, size)))
|
||||||
|
{
|
||||||
|
AddChild(&drawable);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetSize(float size = 0.25f)
|
||||||
|
{
|
||||||
|
SetMatrix(Math::Utils::scale(Math::Vector3f(size, size, size)));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
23
openVulkanoCpp/Shader/originIndicator.vert
Normal file
23
openVulkanoCpp/Shader/originIndicator.vert
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#version 450
|
||||||
|
#extension GL_ARB_separate_shader_objects : enable
|
||||||
|
|
||||||
|
layout(set = 0, binding = 0) uniform NodeData
|
||||||
|
{
|
||||||
|
mat4 world;
|
||||||
|
} node;
|
||||||
|
|
||||||
|
layout(set = 1, binding = 0) uniform CameraData
|
||||||
|
{
|
||||||
|
mat4 viewProjection;
|
||||||
|
} cam;
|
||||||
|
|
||||||
|
layout(location = 0) out vec4 color;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
int i = gl_VertexIndex & -2;
|
||||||
|
color = vec4(i == 0, i == 2, i == 4, 1);
|
||||||
|
vec4 position = color * (gl_VertexIndex & 1);
|
||||||
|
position.w = 1;
|
||||||
|
gl_Position = cam.viewProjection * node.world * position;
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "Scene/Prefabs/OriginIndicatorDrawable.hpp"
|
||||||
|
#include "VulkanGeometry.hpp"
|
||||||
|
#include "Vulkan/VulkanDrawContext.hpp"
|
||||||
|
|
||||||
|
using namespace OpenVulkano::Scene;
|
||||||
|
|
||||||
|
namespace OpenVulkano::Vulkan
|
||||||
|
{
|
||||||
|
void EncodeOriginIndicatorDrawable(Drawable* instance, Vulkan::VulkanDrawContext* drawContext)
|
||||||
|
{
|
||||||
|
for(Node* node : instance->GetNodes())
|
||||||
|
{
|
||||||
|
if (!node->IsEnabled()) [[unlikely]] continue;
|
||||||
|
drawContext->EncodeNode(node);
|
||||||
|
drawContext->commandBuffer.draw(6, 1, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
void* gridDrawableVulkanEncoderReg = DrawEncoder::RegisterVulkanEncodeFunction<OriginIndicatorDrawable>(&OpenVulkano::Vulkan::EncodeOriginIndicatorDrawable);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user