Moved frame rendering from KRCamera to KRRenderGraph
This commit is contained in:
@@ -111,7 +111,7 @@ const char* KRPipeline::KRENGINE_PUSH_CONSTANT_NAMES[] = {
|
|||||||
"fade_color", // PushConstant::fade_color
|
"fade_color", // PushConstant::fade_color
|
||||||
};
|
};
|
||||||
|
|
||||||
KRPipeline::KRPipeline(KRContext& context, KrDeviceHandle deviceHandle, KRRenderPass* renderPass, Vector2i viewport_size, Vector2i scissor_size, const PipelineInfo& info, const char* szKey, const std::vector<KRShader*>& shaders, uint32_t vertexAttributes, ModelFormat modelFormat)
|
KRPipeline::KRPipeline(KRContext& context, KrDeviceHandle deviceHandle, const KRRenderPass* renderPass, Vector2i viewport_size, Vector2i scissor_size, const PipelineInfo& info, const char* szKey, const std::vector<KRShader*>& shaders, uint32_t vertexAttributes, ModelFormat modelFormat)
|
||||||
: KRContextObject(context)
|
: KRContextObject(context)
|
||||||
, m_deviceHandle(deviceHandle)
|
, m_deviceHandle(deviceHandle)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ class KRPipeline : public KRContextObject
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
KRPipeline(KRContext& context, KrDeviceHandle deviceHandle, KRRenderPass* renderPass, hydra::Vector2i viewport_size, hydra::Vector2i scissor_size, const PipelineInfo& info, const char* szKey, const std::vector<KRShader*>& shaders, uint32_t vertexAttributes, ModelFormat modelFormat);
|
KRPipeline(KRContext& context, KrDeviceHandle deviceHandle, const KRRenderPass* renderPass, hydra::Vector2i viewport_size, hydra::Vector2i scissor_size, const PipelineInfo& info, const char* szKey, const std::vector<KRShader*>& shaders, uint32_t vertexAttributes, ModelFormat modelFormat);
|
||||||
virtual ~KRPipeline();
|
virtual ~KRPipeline();
|
||||||
const char* getKey() const;
|
const char* getKey() const;
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ KRPipeline* KRPipelineManager::getPipeline(KRSurface& surface, const PipelineInf
|
|||||||
std::vector<KRShader*> shaders;
|
std::vector<KRShader*> shaders;
|
||||||
shaders.push_back(m_pContext->getShaderManager()->get(*info.shader_name + ".vert", "spv"));
|
shaders.push_back(m_pContext->getShaderManager()->get(*info.shader_name + ".vert", "spv"));
|
||||||
shaders.push_back(m_pContext->getShaderManager()->get(*info.shader_name + ".frag", "spv"));
|
shaders.push_back(m_pContext->getShaderManager()->get(*info.shader_name + ".frag", "spv"));
|
||||||
KRPipeline* pipeline = new KRPipeline(*m_pContext, surface.m_deviceHandle, surface.getRenderPass(RenderPassType::RENDER_PASS_FORWARD_OPAQUE), surface.getDimensions(), surface.getDimensions(), info, info.shader_name->c_str(), shaders, info.vertexAttributes, info.modelFormat);
|
KRPipeline* pipeline = new KRPipeline(*m_pContext, surface.m_deviceHandle, info.renderPass, surface.getDimensions(), surface.getDimensions(), info, info.shader_name->c_str(), shaders, info.vertexAttributes, info.modelFormat);
|
||||||
|
|
||||||
m_pipelines[key] = pipeline;
|
m_pipelines[key] = pipeline;
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,10 @@
|
|||||||
#include "KRPresentationThread.h"
|
#include "KRPresentationThread.h"
|
||||||
#include "KRRenderPass.h"
|
#include "KRRenderPass.h"
|
||||||
#include "KRSwapchain.h"
|
#include "KRSwapchain.h"
|
||||||
|
#include "KRRenderGraph.h"
|
||||||
|
#include "KRRenderGraphDeferred.h"
|
||||||
|
#include "KRRenderGraphForward.h"
|
||||||
|
#include "KRRenderGraphBlackFrame.h"
|
||||||
|
|
||||||
KRPresentationThread::KRPresentationThread(KRContext& context)
|
KRPresentationThread::KRPresentationThread(KRContext& context)
|
||||||
: KRContextObject(context)
|
: KRContextObject(context)
|
||||||
@@ -161,9 +165,10 @@ void KRPresentationThread::renderFrame()
|
|||||||
// TODO - This needs to be moved to the Render thread...
|
// TODO - This needs to be moved to the Render thread...
|
||||||
float deltaTime = 0.005; // TODO - Replace dummy value
|
float deltaTime = 0.005; // TODO - Replace dummy value
|
||||||
if (scene) {
|
if (scene) {
|
||||||
scene->renderFrame(commandBuffer, surface, deltaTime);
|
KRRenderGraphForward* renderGraph = surface.m_renderGraphForward.get();
|
||||||
|
scene->renderFrame(commandBuffer, surface, *renderGraph, deltaTime);
|
||||||
} else {
|
} else {
|
||||||
surface.renderBlackFrame(commandBuffer);
|
surface.m_renderGraphBlackFrame->render(commandBuffer, surface, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vkEndCommandBuffer(commandBuffer) != VK_SUCCESS) {
|
if (vkEndCommandBuffer(commandBuffer) != VK_SUCCESS) {
|
||||||
|
|||||||
@@ -249,22 +249,11 @@ VkFormat KRSurface::getDepthFormat() const
|
|||||||
return m_swapChain->m_depthFormat;
|
return m_swapChain->m_depthFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
KRRenderPass* KRSurface::getRenderPass(RenderPassType type)
|
|
||||||
{
|
|
||||||
return m_renderGraphForward->getRenderPass(type);
|
|
||||||
}
|
|
||||||
|
|
||||||
void KRSurface::endFrame()
|
void KRSurface::endFrame()
|
||||||
{
|
{
|
||||||
m_frameIndex++;
|
m_frameIndex++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void KRSurface::renderBlackFrame(VkCommandBuffer &commandBuffer)
|
|
||||||
{
|
|
||||||
m_renderGraphBlackFrame->render(commandBuffer, *this, nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
VkFormat KRSurface::getSurfaceFormat() const
|
VkFormat KRSurface::getSurfaceFormat() const
|
||||||
{
|
{
|
||||||
return m_surfaceFormat.format;
|
return m_surfaceFormat.format;
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ public:
|
|||||||
uint32_t getHeight() const;
|
uint32_t getHeight() const;
|
||||||
hydra::Vector2i getDimensions() const;
|
hydra::Vector2i getDimensions() const;
|
||||||
VkFormat getDepthFormat() const;
|
VkFormat getDepthFormat() const;
|
||||||
void renderBlackFrame(VkCommandBuffer &commandBuffer);
|
|
||||||
VkFormat getSurfaceFormat() const;
|
VkFormat getSurfaceFormat() const;
|
||||||
|
|
||||||
KRSurface(const KRSurface&) = delete;
|
KRSurface(const KRSurface&) = delete;
|
||||||
@@ -62,7 +61,6 @@ public:
|
|||||||
|
|
||||||
KrResult initialize();
|
KrResult initialize();
|
||||||
KrResult recreateSwapChain();
|
KrResult recreateSwapChain();
|
||||||
KRRenderPass* getRenderPass(RenderPassType type);
|
|
||||||
|
|
||||||
void endFrame();
|
void endFrame();
|
||||||
KrSurfaceHandle m_handle;
|
KrSurfaceHandle m_handle;
|
||||||
@@ -83,6 +81,9 @@ public:
|
|||||||
private:
|
private:
|
||||||
void destroySwapChain();
|
void destroySwapChain();
|
||||||
KrResult createSwapChain();
|
KrResult createSwapChain();
|
||||||
|
|
||||||
|
public:
|
||||||
|
// TODO - These need to be relocated...
|
||||||
std::unique_ptr<KRRenderGraphForward> m_renderGraphForward;
|
std::unique_ptr<KRRenderGraphForward> m_renderGraphForward;
|
||||||
std::unique_ptr<KRRenderGraphDeferred> m_renderGraphDeferred;
|
std::unique_ptr<KRRenderGraphDeferred> m_renderGraphDeferred;
|
||||||
std::unique_ptr<KRRenderGraphBlackFrame> m_renderGraphBlackFrame;
|
std::unique_ptr<KRRenderGraphBlackFrame> m_renderGraphBlackFrame;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include "KRRenderPass.h"
|
#include "KRRenderPass.h"
|
||||||
#include "KRPipeline.h"
|
#include "KRPipeline.h"
|
||||||
#include "KRRenderPass.h"
|
#include "KRRenderPass.h"
|
||||||
|
#include "KRRenderGraph.h"
|
||||||
|
|
||||||
using namespace mimir;
|
using namespace mimir;
|
||||||
using namespace hydra;
|
using namespace hydra;
|
||||||
@@ -231,7 +232,7 @@ void KRCamera::render(KRNode::RenderInfo& ri)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& compositeSurface)
|
void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& compositeSurface, KRRenderGraph& renderGraph)
|
||||||
{
|
{
|
||||||
if (compositeSurface.m_handle != m_surfaceHandle) {
|
if (compositeSurface.m_handle != m_surfaceHandle) {
|
||||||
// Only render to the assigned surface
|
// Only render to the assigned surface
|
||||||
@@ -268,204 +269,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& compositeS
|
|||||||
|
|
||||||
m_viewport.expireOcclusionResults(getContext().getCurrentFrame());
|
m_viewport.expireOcclusionResults(getContext().getCurrentFrame());
|
||||||
|
|
||||||
// ----====---- Pre-stream resources ----====----
|
renderGraph.render(commandBuffer, compositeSurface, this);
|
||||||
KRNode::RenderInfo ri(commandBuffer);
|
|
||||||
ri.camera = this;
|
|
||||||
ri.viewport = &m_viewport;
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_PRESTREAM);
|
|
||||||
ri.surface = &compositeSurface;
|
|
||||||
|
|
||||||
render(ri);
|
|
||||||
|
|
||||||
// ----====---- Generate Shadowmaps for Lights ----====----
|
|
||||||
if (settings.m_cShadowBuffers > 0) {
|
|
||||||
GL_PUSH_GROUP_MARKER("Generate Shadowmaps");
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_SHADOWMAP);
|
|
||||||
render(ri);
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (settings.bEnableDeferredLighting) {
|
|
||||||
|
|
||||||
// ----====---- Opaque Geometry, Deferred rendering Pass 1 ----====----
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Deferred Lighting - Pass 1 (Opaque)");
|
|
||||||
|
|
||||||
// Start render pass
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_DEFERRED_GBUFFER);
|
|
||||||
ri.renderPass->begin(commandBuffer, compositeSurface);
|
|
||||||
|
|
||||||
// Render the geometry
|
|
||||||
render(ri);
|
|
||||||
|
|
||||||
// End render pass
|
|
||||||
ri.renderPass->end(commandBuffer);
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----====---- Opaque Geometry, Deferred rendering Pass 2 ----====----
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Deferred Lighting - Pass 2 (Opaque)");
|
|
||||||
|
|
||||||
// Set render target
|
|
||||||
GLDEBUG(glBindFramebuffer(GL_FRAMEBUFFER, lightAccumulationBuffer));
|
|
||||||
GLDEBUG(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, compositeDepthTexture, 0));
|
|
||||||
GLDEBUG(glClearColor(0.0f, 0.0f, 0.0f, 0.0f));
|
|
||||||
GLDEBUG(glClear(GL_COLOR_BUFFER_BIT));
|
|
||||||
|
|
||||||
// Set source to buffers from pass 1
|
|
||||||
m_pContext->getTextureManager()->selectTexture(0 /*GL_TEXTURE_2D*/, 6, compositeColorTexture);
|
|
||||||
m_pContext->getTextureManager()->selectTexture(0 /*GL_TEXTURE_2D*/, 7, compositeDepthTexture);
|
|
||||||
|
|
||||||
// Render the geometry
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_DEFERRED_LIGHTS);
|
|
||||||
ri.renderPass->begin(commandBuffer, compositeSurface);
|
|
||||||
render(ri);
|
|
||||||
ri.renderPass->end(commandBuffer);
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
|
|
||||||
// ----====---- Opaque Geometry, Deferred rendering Pass 3 ----====----
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Deferred Lighting - Pass 3 (Opaque)");
|
|
||||||
|
|
||||||
// Start render pass
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_DEFERRED_OPAQUE);
|
|
||||||
ri.renderPass->begin(commandBuffer, compositeSurface);
|
|
||||||
|
|
||||||
// Set source to buffers from pass 2
|
|
||||||
m_pContext->getTextureManager()->selectTexture(0 /*GL_TEXTURE_2D*/, 6, lightAccumulationTexture);
|
|
||||||
|
|
||||||
// Render the geometry
|
|
||||||
// TODO: At this point, we only want to render octree nodes that produced fragments during the 1st pass into the GBuffer
|
|
||||||
render(ri);
|
|
||||||
|
|
||||||
// End render pass
|
|
||||||
ri.renderPass->end(commandBuffer);
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
} else {
|
|
||||||
// ----====---- Opaque Geometry, Forward Rendering ----====----
|
|
||||||
GL_PUSH_GROUP_MARKER("Forward Rendering - Opaque");
|
|
||||||
|
|
||||||
// Start render pass
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_FORWARD_OPAQUE);
|
|
||||||
ri.renderPass->begin(commandBuffer, compositeSurface);
|
|
||||||
|
|
||||||
// Render the geometry
|
|
||||||
render(ri);
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
|
|
||||||
ri.renderPass->end(commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----====---- Transparent Geometry, Forward Rendering ----====----
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Forward Rendering - Transparent");
|
|
||||||
|
|
||||||
// Render all transparent geometry
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_FORWARD_TRANSPARENT);
|
|
||||||
ri.renderPass->begin(commandBuffer, compositeSurface);
|
|
||||||
render(ri);
|
|
||||||
ri.renderPass->end(commandBuffer);
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
|
|
||||||
// ----====---- Particle Occlusion Tests ----====----
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Particle Occlusion Tests");
|
|
||||||
|
|
||||||
// ----====---- Perform Occlusion Tests ----====----
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_PARTICLE_OCCLUSION);
|
|
||||||
if (ri.renderPass) {
|
|
||||||
ri.renderPass->begin(commandBuffer, compositeSurface);
|
|
||||||
render(ri);
|
|
||||||
ri.renderPass->end(commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
|
|
||||||
// ----====---- Flares ----====----
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Additive Particles");
|
|
||||||
|
|
||||||
// Render all flares
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_ADDITIVE_PARTICLES);
|
|
||||||
if (ri.renderPass) {
|
|
||||||
ri.renderPass->begin(commandBuffer, compositeSurface);
|
|
||||||
render(ri);
|
|
||||||
ri.renderPass->end(commandBuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
|
|
||||||
// ----====---- Volumetric Lighting ----====----
|
|
||||||
|
|
||||||
if (settings.volumetric_environment_enable) {
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Volumetric Lighting");
|
|
||||||
|
|
||||||
KRViewport volumetricLightingViewport = KRViewport(Vector2::Create((float)volumetricBufferWidth, (float)volumetricBufferHeight), m_viewport.getViewMatrix(), m_viewport.getProjectionMatrix());
|
|
||||||
|
|
||||||
if (settings.volumetric_environment_downsample != 0) {
|
|
||||||
// Set render target
|
|
||||||
GLDEBUG(glBindFramebuffer(GL_FRAMEBUFFER, volumetricLightAccumulationBuffer));
|
|
||||||
GLDEBUG(glClearColor(0.0f, 0.0f, 0.0f, 0.0f));
|
|
||||||
GLDEBUG(glClear(GL_COLOR_BUFFER_BIT));
|
|
||||||
|
|
||||||
// Disable z-buffer test
|
|
||||||
GLDEBUG(glDisable(GL_DEPTH_TEST));
|
|
||||||
m_pContext->getTextureManager()->selectTexture(0 /*GL_TEXTURE_2D*/, 0, compositeDepthTexture);
|
|
||||||
|
|
||||||
GLDEBUG(glViewport(0, 0, (int)volumetricLightingViewport.getSize().x, (int)volumetricLightingViewport.getSize().y));
|
|
||||||
} else {
|
|
||||||
// Enable z-buffer test
|
|
||||||
GLDEBUG(glEnable(GL_DEPTH_TEST));
|
|
||||||
GLDEBUG(glDepthFunc(GL_LEQUAL));
|
|
||||||
GLDEBUG(glDepthRangef(0.0, 1.0));
|
|
||||||
}
|
|
||||||
|
|
||||||
ri.renderPass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE);
|
|
||||||
ri.viewport = &volumetricLightingViewport;
|
|
||||||
ri.renderPass->begin(commandBuffer, compositeSurface);
|
|
||||||
render(ri);
|
|
||||||
ri.renderPass->end(commandBuffer);
|
|
||||||
ri.viewport = &m_viewport;
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----====---- Debug Overlay ----====----
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Debug Overlays");
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
|
|
||||||
// fprintf(stderr, "VBO Mem: %i Kbyte Texture Mem: %i/%i Kbyte (active/total) Shader Handles: %i Visible Bounds: %i Max Texture LOD: %i\n", (int)m_pContext->getMeshManager()->getMemUsed() / 1024, (int)m_pContext->getTextureManager()->getActiveMemUsed() / 1024, (int)m_pContext->getTextureManager()->getMemUsed() / 1024, (int)m_pContext->getPipelineManager()->getShaderHandlesUsed(), (int)m_visibleBounds.size(), m_pContext->getTextureManager()->getLODDimCap());
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Debug Overlays");
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
|
|
||||||
GL_PUSH_GROUP_MARKER("Post Processing");
|
|
||||||
|
|
||||||
KRRenderPass* postCompositePass = compositeSurface.getRenderPass(RenderPassType::RENDER_PASS_POST_COMPOSITE);
|
|
||||||
postCompositePass->begin(commandBuffer, compositeSurface);
|
|
||||||
|
|
||||||
renderPost(ri);
|
|
||||||
|
|
||||||
postCompositePass->end(commandBuffer);
|
|
||||||
|
|
||||||
|
|
||||||
GL_POP_GROUP_MARKER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ class KRModel;
|
|||||||
class KRScene;
|
class KRScene;
|
||||||
class KRViewport;
|
class KRViewport;
|
||||||
class KRSurface;
|
class KRSurface;
|
||||||
|
class KRRenderGraph;
|
||||||
|
|
||||||
class KRCamera : public KRNode
|
class KRCamera : public KRNode
|
||||||
{
|
{
|
||||||
@@ -57,7 +58,7 @@ public:
|
|||||||
|
|
||||||
KrResult update(const KrNodeInfo* nodeInfo) override;
|
KrResult update(const KrNodeInfo* nodeInfo) override;
|
||||||
|
|
||||||
void renderFrame(VkCommandBuffer& commandBuffer, KRSurface& compositeSurface);
|
void renderFrame(VkCommandBuffer& commandBuffer, KRSurface& compositeSurface, KRRenderGraph& renderGraph);
|
||||||
|
|
||||||
void render(KRNode::RenderInfo& ri);
|
void render(KRNode::RenderInfo& ri);
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ KRScene::~KRScene()
|
|||||||
m_pRootNode = NULL;
|
m_pRootNode = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void KRScene::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, float deltaTime)
|
void KRScene::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, KRRenderGraph& renderGraph, float deltaTime)
|
||||||
{
|
{
|
||||||
getContext().startFrame(deltaTime);
|
getContext().startFrame(deltaTime);
|
||||||
KRCamera* camera = find<KRCamera>("default_camera");
|
KRCamera* camera = find<KRCamera>("default_camera");
|
||||||
@@ -74,7 +74,7 @@ void KRScene::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, fl
|
|||||||
getContext().getAudioManager()->setReverbMaxLength(camera->settings.siren_reverb_max_length);
|
getContext().getAudioManager()->setReverbMaxLength(camera->settings.siren_reverb_max_length);
|
||||||
getContext().getTextureManager()->setMaxAnisotropy(camera->settings.max_anisotropy);
|
getContext().getTextureManager()->setMaxAnisotropy(camera->settings.max_anisotropy);
|
||||||
|
|
||||||
camera->renderFrame(commandBuffer, surface);
|
camera->renderFrame(commandBuffer, surface, renderGraph);
|
||||||
getContext().endFrame(deltaTime);
|
getContext().endFrame(deltaTime);
|
||||||
physicsUpdate(deltaTime);
|
physicsUpdate(deltaTime);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@
|
|||||||
class KRModel;
|
class KRModel;
|
||||||
class KRLight;
|
class KRLight;
|
||||||
class KRSurface;
|
class KRSurface;
|
||||||
|
class KRRenderGraph;
|
||||||
|
|
||||||
using std::vector;
|
using std::vector;
|
||||||
|
|
||||||
@@ -70,7 +71,7 @@ public:
|
|||||||
bool rayCast(const hydra::Vector3& v0, const hydra::Vector3& dir, hydra::HitInfo& hitinfo, unsigned int layer_mask);
|
bool rayCast(const hydra::Vector3& v0, const hydra::Vector3& dir, hydra::HitInfo& hitinfo, unsigned int layer_mask);
|
||||||
bool sphereCast(const hydra::Vector3& v0, const hydra::Vector3& v1, float radius, hydra::HitInfo& hitinfo, unsigned int layer_mask);
|
bool sphereCast(const hydra::Vector3& v0, const hydra::Vector3& v1, float radius, hydra::HitInfo& hitinfo, unsigned int layer_mask);
|
||||||
|
|
||||||
void renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, float deltaTime);
|
void renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, KRRenderGraph& renderGraph, float deltaTime);
|
||||||
void render(KRNode::RenderInfo& ri);
|
void render(KRNode::RenderInfo& ri);
|
||||||
|
|
||||||
void updateOctree(const KRViewport& viewport);
|
void updateOctree(const KRViewport& viewport);
|
||||||
|
|||||||
Reference in New Issue
Block a user