51 lines
1.5 KiB
C++
51 lines
1.5 KiB
C++
/*
|
|
* 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 "VulkanDrawContext.hpp"
|
|
#include "Scene/Shader/Shader.hpp"
|
|
#include "Scene/VulkanShader.hpp"
|
|
#include "Scene/VulkanCamera.hpp"
|
|
#include "Scene/VulkanNode.hpp"
|
|
|
|
namespace OpenVulkano::Vulkan
|
|
{
|
|
void VulkanDrawContext::EncodeShader(Scene::Shader* shader)
|
|
{
|
|
VulkanShader* vkShader = shader->GetRenderResource();
|
|
if (!vkShader)
|
|
{
|
|
vkShader = renderer->GetResourceManager().CreateShader(shader);
|
|
}
|
|
else if (m_lastShader == vkShader) return; // Skip it if shader is already bound
|
|
vkShader->Record(this);
|
|
m_lastShader = vkShader;
|
|
if (m_lastCamera) m_lastCamera->Record(this);
|
|
}
|
|
|
|
void VulkanDrawContext::EncodeShader(VulkanShader* vkShader)
|
|
{
|
|
if (m_lastShader == vkShader) return; // Skip it if shader is already bound
|
|
vkShader->Record(this);
|
|
m_lastShader = vkShader;
|
|
}
|
|
|
|
void VulkanDrawContext::EncodeNode(Scene::Node* node)
|
|
{
|
|
VulkanNode* vkNode = node->GetRenderResource();
|
|
if (!vkNode)
|
|
{
|
|
vkNode = renderer->GetResourceManager().PrepareNode(node);
|
|
}
|
|
vkNode->Record(this);
|
|
}
|
|
|
|
void VulkanDrawContext::SetCamera(Scene::Camera* camera)
|
|
{
|
|
if (!camera->renderCamera) m_lastCamera = ResourceManager::INSTANCE->PrepareCamera(camera);
|
|
else m_lastCamera = static_cast<VulkanCamera*>(camera->renderCamera);
|
|
if (m_lastShader) m_lastCamera->Record(this);
|
|
}
|
|
} |