From c58487c00f75982c74fa87fb9e1fb88bd9884b56 Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Sun, 27 Mar 2022 22:37:15 -0700 Subject: [PATCH] KRRenderPass now selected by KRCamera --- kraken/KRCamera.cpp | 30 ++++++++++++++++++++++-------- kraken/KRCamera.h | 3 ++- kraken/KRPresentationThread.cpp | 23 ++++------------------- kraken/KRScene.cpp | 4 ++-- kraken/KRScene.h | 3 ++- 5 files changed, 32 insertions(+), 31 deletions(-) diff --git a/kraken/KRCamera.cpp b/kraken/KRCamera.cpp index 7b2a073..40bc2ed 100755 --- a/kraken/KRCamera.cpp +++ b/kraken/KRCamera.cpp @@ -33,6 +33,7 @@ #include "KRCamera.h" #include "KRStockGeometry.h" #include "KRDirectionalLight.h" +#include "KRRenderPass.h" /* static */ void KRCamera::InitNodeInfo(KrNodeInfo* nodeInfo) @@ -101,7 +102,7 @@ const std::string KRCamera::getSkyBox() const return m_skyBox; } -void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight) +void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight) { // ----====---- Record timing information for measuring FPS ----====---- uint64_t current_time = m_pContext->getAbsoluteTimeMilliseconds(); @@ -252,8 +253,6 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLi GL_POP_GROUP_MARKER; } else { // ----====---- Opaque Geometry, Forward Rendering ----====---- - - // TODO - Vulkan refactoring... /* GL_PUSH_GROUP_MARKER("Forward Rendering - Opaque"); @@ -290,14 +289,29 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLi GLDEBUG(glDepthRangef(0.0, 1.0)); */ + + KRRenderPass& forwardOpaquePass = surface.getForwardOpaquePass(); + forwardOpaquePass.begin(commandBuffer, surface); // Render the geometry scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_OPAQUE, false); - - // TODO - Vulkan refactoring... -/* - GL_POP_GROUP_MARKER; -*/ + + + // ---------- Start: Vulkan Debug Code ---------- + KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES; + bool haveMesh = testVertices.isVBOReady(); + + if (haveMesh) { + KRPipeline* testPipeline = m_pContext->getPipelineManager()->getPipeline(surface, forwardOpaquePass, "vulkan_test", testVertices.getVertexAttributes(), KRMesh::model_format_t::KRENGINE_MODEL_FORMAT_STRIP); + testPipeline->bind(commandBuffer); + testVertices.bind(commandBuffer); + vkCmdDraw(commandBuffer, 4, 1, 0, 0); + } + + // ---------- End: Vulkan Debug Code ---------- + + + forwardOpaquePass.end(commandBuffer); } // ----====---- Sky Box ----====---- diff --git a/kraken/KRCamera.h b/kraken/KRCamera.h index 4a1c8cd..2fa98f8 100755 --- a/kraken/KRCamera.h +++ b/kraken/KRCamera.h @@ -46,6 +46,7 @@ class KRModel; class KRScene; class KRViewport; +class KRSurface; class KRCamera : public KRNode { public: @@ -53,7 +54,7 @@ public: KRCamera(KRScene &scene, std::string name); virtual ~KRCamera(); - void renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight); + void renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight); KRRenderSettings settings; diff --git a/kraken/KRPresentationThread.cpp b/kraken/KRPresentationThread.cpp index 5b13fda..d320109 100644 --- a/kraken/KRPresentationThread.cpp +++ b/kraken/KRPresentationThread.cpp @@ -151,32 +151,17 @@ void KRPresentationThread::renderFrame() // TODO - Add error handling... } - KRRenderPass& forwardOpaquePass = surface.getForwardOpaquePass(); - forwardOpaquePass.begin(commandBuffer, surface); - - KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES; - bool haveMesh = testVertices.isVBOReady(); - - if (haveMesh) { - KRPipeline* testPipeline = m_pContext->getPipelineManager()->getPipeline(surface, forwardOpaquePass, "vulkan_test", testVertices.getVertexAttributes(), KRMesh::model_format_t::KRENGINE_MODEL_FORMAT_STRIP); - testPipeline->bind(commandBuffer); - testVertices.bind(commandBuffer); - vkCmdDraw(commandBuffer, 4, 1, 0, 0); + // TODO - This needs to be moved to the Render thread... + float deltaTime = 0.005; // TODO - Replace dummy value + if (scene) { + scene->renderFrame(commandBuffer, surface, 0, deltaTime, surface.m_swapChainExtent.width, surface.m_swapChainExtent.height); } - forwardOpaquePass.end(commandBuffer); - if (vkEndCommandBuffer(commandBuffer) != VK_SUCCESS) { m_activeState = PresentThreadState::error; // TODO - Add error handling... } - // TODO - This needs to be moved to the Render thread... - float deltaTime = 0.005; // TODO - Replace dummy value - if (scene) { - scene->renderFrame(commandBuffer, 0, deltaTime, surface.m_swapChainExtent.width, surface.m_swapChainExtent.height); - } - VkSubmitInfo submitInfo{}; submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; diff --git a/kraken/KRScene.cpp b/kraken/KRScene.cpp index 30bfa01..08be8c8 100755 --- a/kraken/KRScene.cpp +++ b/kraken/KRScene.cpp @@ -54,7 +54,7 @@ KRScene::~KRScene() { m_pRootNode = NULL; } -void KRScene::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, float deltaTime, int width, int height) { +void KRScene::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, GLint defaultFBO, float deltaTime, int width, int height) { getContext().startFrame(deltaTime); KRCamera *camera = find("default_camera"); if(camera == NULL) { @@ -70,7 +70,7 @@ void KRScene::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, floa getContext().getAudioManager()->setReverbMaxLength(camera->settings.siren_reverb_max_length); getContext().getTextureManager()->setMaxAnisotropy(camera->settings.max_anisotropy); - camera->renderFrame(commandBuffer, defaultFBO, width, height); + camera->renderFrame(commandBuffer, surface, defaultFBO, width, height); getContext().endFrame(deltaTime); physicsUpdate(deltaTime); } diff --git a/kraken/KRScene.h b/kraken/KRScene.h index 0608c0f..f4c82bb 100755 --- a/kraken/KRScene.h +++ b/kraken/KRScene.h @@ -45,6 +45,7 @@ #include "KROctree.h" class KRModel; class KRLight; +class KRSurface; using std::vector; @@ -69,7 +70,7 @@ public: bool rayCast(const Vector3 &v0, const Vector3 &dir, HitInfo &hitinfo, unsigned int layer_mask); bool sphereCast(const Vector3 &v0, const Vector3 &v1, float radius, HitInfo &hitinfo, unsigned int layer_mask); - void renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, float deltaTime, int width, int height); + void renderFrame(VkCommandBuffer& commandBuffer, KRSurface& surface, GLint defaultFBO, float deltaTime, int width, int height); void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, unordered_map &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame); void render(VkCommandBuffer& commandBuffer, KROctreeNode *pOctreeNode, unordered_map &visibleBounds, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass, std::vector &remainingOctrees, std::vector &remainingOctreesTestResults, std::vector &remainingOctreesTestResultsOnly, bool bOcclusionResultsPass, bool bOcclusionTestResultsOnly);