From 0a18ddcbb372d24f1dc738743adbb568afcffc8b Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Mon, 28 Feb 2022 01:41:04 -0800 Subject: [PATCH] Vulkan refactoring - passing VkCommandBuffer down through node render functions --- kraken/KRAmbientZone.cpp | 4 ++-- kraken/KRAmbientZone.h | 2 +- kraken/KRAudioSource.cpp | 4 ++-- kraken/KRAudioSource.h | 2 +- kraken/KRBone.cpp | 4 ++-- kraken/KRBone.h | 2 +- kraken/KRCamera.cpp | 22 +++++++++++----------- kraken/KRCamera.h | 2 +- kraken/KRCollider.cpp | 4 ++-- kraken/KRCollider.h | 2 +- kraken/KRDirectionalLight.cpp | 4 ++-- kraken/KRDirectionalLight.h | 2 +- kraken/KRLight.cpp | 10 +++++----- kraken/KRLight.h | 4 ++-- kraken/KRModel.cpp | 4 ++-- kraken/KRModel.h | 2 +- kraken/KRNode.cpp | 2 +- kraken/KRNode.h | 2 +- kraken/KRParticleSystem.h | 2 +- kraken/KRParticleSystemNewtonian.cpp | 4 ++-- kraken/KRParticleSystemNewtonian.h | 2 +- kraken/KRPointLight.cpp | 4 ++-- kraken/KRPointLight.h | 2 +- kraken/KRReverbZone.cpp | 4 ++-- kraken/KRReverbZone.h | 2 +- kraken/KRScene.cpp | 20 ++++++++++---------- kraken/KRScene.h | 6 +++--- kraken/KRSprite.cpp | 4 ++-- kraken/KRSprite.h | 2 +- 29 files changed, 65 insertions(+), 65 deletions(-) diff --git a/kraken/KRAmbientZone.cpp b/kraken/KRAmbientZone.cpp index f9e7c3e..aabb8e6 100755 --- a/kraken/KRAmbientZone.cpp +++ b/kraken/KRAmbientZone.cpp @@ -118,11 +118,11 @@ void KRAmbientZone::setZone(const std::string &zone) m_zone = zone; } -void KRAmbientZone::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) +void KRAmbientZone::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); bool bVisualize = pCamera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_SIREN_AMBIENT_ZONES; diff --git a/kraken/KRAmbientZone.h b/kraken/KRAmbientZone.h index e8275b8..ef60720 100755 --- a/kraken/KRAmbientZone.h +++ b/kraken/KRAmbientZone.h @@ -46,7 +46,7 @@ public: virtual tinyxml2::XMLElement *saveXML( tinyxml2::XMLNode *parent); virtual void loadXML(tinyxml2::XMLElement *e); - void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); std::string getZone(); void setZone(const std::string &zone); diff --git a/kraken/KRAudioSource.cpp b/kraken/KRAudioSource.cpp index 2fa203d..07500db 100755 --- a/kraken/KRAudioSource.cpp +++ b/kraken/KRAudioSource.cpp @@ -184,12 +184,12 @@ void KRAudioSource::queueBuffer() m_nextBufferIndex = (m_nextBufferIndex + 1) % m_audioFile->getBufferCount(); } -void KRAudioSource::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) +void KRAudioSource::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); bool bVisualize = false; diff --git a/kraken/KRAudioSource.h b/kraken/KRAudioSource.h index 979ef1b..80d40f2 100755 --- a/kraken/KRAudioSource.h +++ b/kraken/KRAudioSource.h @@ -51,7 +51,7 @@ public: virtual void loadXML(tinyxml2::XMLElement *e); virtual void physicsUpdate(float deltaTime); - void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); // ---- Audio Playback Controls ---- diff --git a/kraken/KRBone.cpp b/kraken/KRBone.cpp index 6b6743f..f29d9d5 100755 --- a/kraken/KRBone.cpp +++ b/kraken/KRBone.cpp @@ -69,11 +69,11 @@ AABB KRBone::getBounds() { return AABB::Create(-Vector3::One(), Vector3::One(), getModelMatrix()); // Only required for bone debug visualization } -void KRBone::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) +void KRBone::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); bool bVisualize = pCamera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_BONES; diff --git a/kraken/KRBone.h b/kraken/KRBone.h index 8a7b96e..d067a6a 100755 --- a/kraken/KRBone.h +++ b/kraken/KRBone.h @@ -47,7 +47,7 @@ public: virtual void loadXML(tinyxml2::XMLElement *e); virtual AABB getBounds(); - void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); void setBindPose(const Matrix4 &pose); const Matrix4 &getBindPose(); diff --git a/kraken/KRCamera.cpp b/kraken/KRCamera.cpp index c75c507..b04f49f 100755 --- a/kraken/KRCamera.cpp +++ b/kraken/KRCamera.cpp @@ -101,7 +101,7 @@ const std::string KRCamera::getSkyBox() const return m_skyBox; } -void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight) +void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight) { // ----====---- Record timing information for measuring FPS ----====---- uint64_t current_time = m_pContext->getAbsoluteTimeMilliseconds(); @@ -132,13 +132,13 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend scene.updateOctree(m_viewport); // ----====---- Pre-stream resources ----====---- - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_PRESTREAM, true); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_PRESTREAM, true); // ----====---- Generate Shadowmaps for Lights ----====---- if(settings.m_cShadowBuffers > 0) { GL_PUSH_GROUP_MARKER("Generate Shadowmaps"); - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_GENERATE_SHADOWMAPS, false /*settings.bEnableDeferredLighting*/); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_GENERATE_SHADOWMAPS, false /*settings.bEnableDeferredLighting*/); GLDEBUG(glViewport(0, 0, (GLsizei)m_viewport.getSize().x, (GLsizei)m_viewport.getSize().y)); GL_POP_GROUP_MARKER; } @@ -177,7 +177,7 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend GLDEBUG(glDisable(GL_BLEND)); // Render the geometry - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_DEFERRED_GBUFFER, false); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_DEFERRED_GBUFFER, false); GL_POP_GROUP_MARKER; @@ -208,7 +208,7 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend // Render the geometry - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_DEFERRED_LIGHTS, false); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_DEFERRED_LIGHTS, false); GL_POP_GROUP_MARKER; @@ -243,7 +243,7 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend // Render the geometry // TODO: At this point, we only want to render octree nodes that produced fragments during the 1st pass into the GBuffer - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_DEFERRED_OPAQUE, false); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_DEFERRED_OPAQUE, false); // Deactivate source buffer texture units m_pContext->getTextureManager()->selectTexture(GL_TEXTURE_2D, 6, 0); @@ -289,7 +289,7 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend // Render the geometry - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_OPAQUE, false); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_OPAQUE, false); GL_POP_GROUP_MARKER; } @@ -361,7 +361,7 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend GLDEBUG(glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); // Render all transparent geometry - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_TRANSPARENT, false); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_FORWARD_TRANSPARENT, false); GL_POP_GROUP_MARKER; @@ -389,7 +389,7 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend GLDEBUG(glBlendFunc(GL_ONE, GL_ONE)); // ----====---- Perform Occlusion Tests ----====---- - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, RENDER_PASS_PARTICLE_OCCLUSION, false); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, RENDER_PASS_PARTICLE_OCCLUSION, false); GL_POP_GROUP_MARKER; @@ -416,7 +416,7 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend GLDEBUG(glBlendFunc(GL_ONE, GL_ONE)); // Render all flares - scene.render(this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_ADDITIVE_PARTICLES, false); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), m_viewport, KRNode::RENDER_PASS_ADDITIVE_PARTICLES, false); GL_POP_GROUP_MARKER; @@ -446,7 +446,7 @@ void KRCamera::renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint rend GLDEBUG(glDepthRangef(0.0, 1.0)); } - scene.render(this, m_viewport.getVisibleBounds(), volumetricLightingViewport, KRNode::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE, false); + scene.render(commandBuffer, this, m_viewport.getVisibleBounds(), volumetricLightingViewport, KRNode::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE, false); if(settings.volumetric_environment_downsample != 0) { // Set render target diff --git a/kraken/KRCamera.h b/kraken/KRCamera.h index 86bf0ea..2d08f91 100755 --- a/kraken/KRCamera.h +++ b/kraken/KRCamera.h @@ -53,7 +53,7 @@ public: KRCamera(KRScene &scene, std::string name); virtual ~KRCamera(); - void renderFrame(GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight); + void renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLint renderBufferWidth, GLint renderBufferHeight); KRRenderSettings settings; diff --git a/kraken/KRCollider.cpp b/kraken/KRCollider.cpp index 54deba7..e0ecb16 100755 --- a/kraken/KRCollider.cpp +++ b/kraken/KRCollider.cpp @@ -192,11 +192,11 @@ void KRCollider::setAudioOcclusion(float audio_occlusion) } -void KRCollider::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) +void KRCollider::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); if(renderPass == KRNode::RENDER_PASS_FORWARD_TRANSPARENT && pCamera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_COLLIDERS) { loadModel(); diff --git a/kraken/KRCollider.h b/kraken/KRCollider.h index af59cab..ecd148d 100755 --- a/kraken/KRCollider.h +++ b/kraken/KRCollider.h @@ -69,7 +69,7 @@ public: float getAudioOcclusion(); void setAudioOcclusion(float audio_occlusion); - void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); private: std::vector m_models; diff --git a/kraken/KRDirectionalLight.cpp b/kraken/KRDirectionalLight.cpp index 3a9162f..a133929 100755 --- a/kraken/KRDirectionalLight.cpp +++ b/kraken/KRDirectionalLight.cpp @@ -119,11 +119,11 @@ int KRDirectionalLight::configureShadowBufferViewports(const KRViewport &viewpor return 1; } -void KRDirectionalLight::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { +void KRDirectionalLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRLight::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRLight::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); if(renderPass == KRNode::RENDER_PASS_DEFERRED_LIGHTS) { // Lights are rendered on the second pass of the deferred renderer diff --git a/kraken/KRDirectionalLight.h b/kraken/KRDirectionalLight.h index a69e700..443ab27 100755 --- a/kraken/KRDirectionalLight.h +++ b/kraken/KRDirectionalLight.h @@ -46,7 +46,7 @@ public: Vector3 getLocalLightDirection(); Vector3 getWorldLightDirection(); - virtual void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + virtual void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); virtual AABB getBounds(); protected: diff --git a/kraken/KRLight.cpp b/kraken/KRLight.cpp index 767edf3..57592c0 100755 --- a/kraken/KRLight.cpp +++ b/kraken/KRLight.cpp @@ -213,15 +213,15 @@ float KRLight::getDecayStart() { return m_decayStart; } -void KRLight::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { +void KRLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); if(renderPass == KRNode::RENDER_PASS_GENERATE_SHADOWMAPS && (pCamera->settings.volumetric_environment_enable || pCamera->settings.dust_particle_enable || (pCamera->settings.m_cShadowBuffers > 0 && m_casts_shadow))) { allocateShadowBuffers(configureShadowBufferViewports(viewport)); - renderShadowBuffers(pCamera); + renderShadowBuffers(commandBuffer, pCamera); } if(renderPass == KRNode::RENDER_PASS_ADDITIVE_PARTICLES && pCamera->settings.dust_particle_enable) { @@ -461,7 +461,7 @@ int KRLight::configureShadowBufferViewports(const KRViewport &viewport) return 0; } -void KRLight::renderShadowBuffers(KRCamera *pCamera) +void KRLight::renderShadowBuffers(VkCommandBuffer& commandBuffer, KRCamera *pCamera) { for(int iShadow=0; iShadow < m_cShadowBuffers; iShadow++) { if(!shadowValid[iShadow]) { @@ -501,7 +501,7 @@ void KRLight::renderShadowBuffers(KRCamera *pCamera) getContext().getPipelineManager()->selectPipeline(*pCamera, shadowShader, m_shadowViewports[iShadow], Matrix4(), std::vector(), std::vector(), std::vector(), 0, KRNode::RENDER_PASS_SHADOWMAP, Vector3::Zero(), 0.0f, Vector4::Zero()); - getScene().render(pCamera, m_shadowViewports[iShadow].getVisibleBounds(), m_shadowViewports[iShadow], KRNode::RENDER_PASS_SHADOWMAP, true); + getScene().render(commandBuffer, pCamera, m_shadowViewports[iShadow].getVisibleBounds(), m_shadowViewports[iShadow], KRNode::RENDER_PASS_SHADOWMAP, true); GLDEBUG(glEnable(GL_CULL_FACE)); } diff --git a/kraken/KRLight.h b/kraken/KRLight.h index 06339ee..c8e629a 100755 --- a/kraken/KRLight.h +++ b/kraken/KRLight.h @@ -64,7 +64,7 @@ public: void setFlareOcclusionSize(float occlusion_size); void deleteBuffers(); - virtual void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + virtual void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); int getShadowBufferCount(); GLuint *getShadowTextures(); @@ -102,7 +102,7 @@ protected: void invalidateShadowBuffers(); virtual int configureShadowBufferViewports(const KRViewport &viewport); - void renderShadowBuffers(KRCamera *pCamera); + void renderShadowBuffers(VkCommandBuffer& commandBuffer, KRCamera *pCamera); }; #endif diff --git a/kraken/KRModel.cpp b/kraken/KRModel.cpp index 5aea932..171dd76 100755 --- a/kraken/KRModel.cpp +++ b/kraken/KRModel.cpp @@ -159,7 +159,7 @@ void KRModel::loadModel() { } } -void KRModel::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { +void KRModel::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible >= LOD_VISIBILITY_PRESTREAM && renderPass == KRNode::RENDER_PASS_PRESTREAM) { preStream(viewport); @@ -167,7 +167,7 @@ void KRModel::render(KRCamera *pCamera, std::vector &point_light if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); if(renderPass != KRNode::RENDER_PASS_DEFERRED_LIGHTS && renderPass != KRNode::RENDER_PASS_ADDITIVE_PARTICLES && renderPass != KRNode::RENDER_PASS_PARTICLE_OCCLUSION && renderPass != KRNode::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE && renderPass != KRNode::RENDER_PASS_GENERATE_SHADOWMAPS && renderPass != KRNode::RENDER_PASS_PRESTREAM) { loadModel(); diff --git a/kraken/KRModel.h b/kraken/KRModel.h index 2968884..958b91b 100755 --- a/kraken/KRModel.h +++ b/kraken/KRModel.h @@ -55,7 +55,7 @@ public: virtual std::string getElementName(); virtual tinyxml2::XMLElement *saveXML( tinyxml2::XMLNode *parent); - virtual void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + virtual void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); virtual AABB getBounds(); diff --git a/kraken/KRNode.cpp b/kraken/KRNode.cpp index 99d162b..e00ba1f 100755 --- a/kraken/KRNode.cpp +++ b/kraken/KRNode.cpp @@ -491,7 +491,7 @@ KRNode *KRNode::LoadXML(KRScene &scene, tinyxml2::XMLElement *e) { return new_node; } -void KRNode::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, RenderPass renderPass) +void KRNode::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; diff --git a/kraken/KRNode.h b/kraken/KRNode.h index 4f4ee51..9c41ab5 100755 --- a/kraken/KRNode.h +++ b/kraken/KRNode.h @@ -193,7 +193,7 @@ public: KRScene &getScene(); - virtual void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, RenderPass renderPass); + virtual void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, RenderPass renderPass); virtual void physicsUpdate(float deltaTime); virtual bool hasPhysics(); diff --git a/kraken/KRParticleSystem.h b/kraken/KRParticleSystem.h index b6c2d4c..0e1f63e 100755 --- a/kraken/KRParticleSystem.h +++ b/kraken/KRParticleSystem.h @@ -44,7 +44,7 @@ public: virtual AABB getBounds() = 0; - virtual void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) = 0; + virtual void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) = 0; protected: KRParticleSystem(KRScene &scene, std::string name); diff --git a/kraken/KRParticleSystemNewtonian.cpp b/kraken/KRParticleSystemNewtonian.cpp index 5ec4cec..004a2d7 100755 --- a/kraken/KRParticleSystemNewtonian.cpp +++ b/kraken/KRParticleSystemNewtonian.cpp @@ -78,11 +78,11 @@ bool KRParticleSystemNewtonian::hasPhysics() return true; } -void KRParticleSystemNewtonian::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { +void KRParticleSystemNewtonian::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); if(renderPass == KRNode::RENDER_PASS_ADDITIVE_PARTICLES) { if(viewport.visible(getBounds())) { diff --git a/kraken/KRParticleSystemNewtonian.h b/kraken/KRParticleSystemNewtonian.h index 815f46f..2b6411d 100755 --- a/kraken/KRParticleSystemNewtonian.h +++ b/kraken/KRParticleSystemNewtonian.h @@ -46,7 +46,7 @@ public: virtual AABB getBounds(); - virtual void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + virtual void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); virtual void physicsUpdate(float deltaTime); diff --git a/kraken/KRPointLight.cpp b/kraken/KRPointLight.cpp index ac593b2..7794c45 100755 --- a/kraken/KRPointLight.cpp +++ b/kraken/KRPointLight.cpp @@ -69,11 +69,11 @@ AABB KRPointLight::getBounds() { return AABB::Create(Vector3::Create(-influence_radius), Vector3::Create(influence_radius), getModelMatrix()); } -void KRPointLight::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) +void KRPointLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRLight::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRLight::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); bool bVisualize = renderPass == KRNode::RENDER_PASS_FORWARD_TRANSPARENT && pCamera->settings.bShowDeferred; diff --git a/kraken/KRPointLight.h b/kraken/KRPointLight.h index 64c5d6d..e7626bb 100755 --- a/kraken/KRPointLight.h +++ b/kraken/KRPointLight.h @@ -44,7 +44,7 @@ public: virtual std::string getElementName(); virtual AABB getBounds(); - virtual void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + virtual void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); private: void generateMesh(); diff --git a/kraken/KRReverbZone.cpp b/kraken/KRReverbZone.cpp index 67224bc..1246182 100755 --- a/kraken/KRReverbZone.cpp +++ b/kraken/KRReverbZone.cpp @@ -117,11 +117,11 @@ void KRReverbZone::setZone(const std::string &zone) m_zone = zone; } -void KRReverbZone::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) +void KRReverbZone::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); bool bVisualize = pCamera->settings.debug_display == KRRenderSettings::KRENGINE_DEBUG_DISPLAY_SIREN_REVERB_ZONES; diff --git a/kraken/KRReverbZone.h b/kraken/KRReverbZone.h index b0004a9..e04306c 100755 --- a/kraken/KRReverbZone.h +++ b/kraken/KRReverbZone.h @@ -46,7 +46,7 @@ public: virtual tinyxml2::XMLElement *saveXML( tinyxml2::XMLNode *parent); virtual void loadXML(tinyxml2::XMLElement *e); - void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); std::string getZone(); void setZone(const std::string &zone); diff --git a/kraken/KRScene.cpp b/kraken/KRScene.cpp index 92766de..4c02a2a 100755 --- a/kraken/KRScene.cpp +++ b/kraken/KRScene.cpp @@ -54,7 +54,7 @@ KRScene::~KRScene() { m_pRootNode = NULL; } -void KRScene::renderFrame(GLint defaultFBO, float deltaTime, int width, int height) { +void KRScene::renderFrame(VkCommandBuffer& commandBuffer, 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(GLint defaultFBO, float deltaTime, int width, int heig getContext().getAudioManager()->setReverbMaxLength(camera->settings.siren_reverb_max_length); getContext().getTextureManager()->setMaxAnisotropy(camera->settings.max_anisotropy); - camera->renderFrame(defaultFBO, width, height); + camera->renderFrame(commandBuffer, defaultFBO, width, height); getContext().endFrame(deltaTime); physicsUpdate(deltaTime); } @@ -97,7 +97,7 @@ std::set &KRScene::getLights() return m_lights; } -void KRScene::render(KRCamera *pCamera, unordered_map &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame) { +void KRScene::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, unordered_map &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame) { if(new_frame) { // Expire cached occlusion test results. // Cached "failed" results are expired on the next frame (marked with .second of -1) @@ -143,7 +143,7 @@ void KRScene::render(KRCamera *pCamera, unordered_map &visibleBounds, // Render outer nodes for(std::set::iterator itr=outerNodes.begin(); itr != outerNodes.end(); itr++) { KRNode *node = (*itr); - node->render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + node->render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); } std::vector remainingOctrees; @@ -159,10 +159,10 @@ void KRScene::render(KRCamera *pCamera, unordered_map &visibleBounds, newRemainingOctrees.clear(); newRemainingOctreesTestResults.clear(); for(std::vector::iterator octree_itr = remainingOctrees.begin(); octree_itr != remainingOctrees.end(); octree_itr++) { - render(*octree_itr, visibleBounds, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass, newRemainingOctrees, newRemainingOctreesTestResults, remainingOctreesTestResultsOnly, false, false); + render(commandBuffer, *octree_itr, visibleBounds, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass, newRemainingOctrees, newRemainingOctreesTestResults, remainingOctreesTestResultsOnly, false, false); } for(std::vector::iterator octree_itr = remainingOctreesTestResults.begin(); octree_itr != remainingOctreesTestResults.end(); octree_itr++) { - render(*octree_itr, visibleBounds, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass, newRemainingOctrees, newRemainingOctreesTestResults, remainingOctreesTestResultsOnly, true, false); + render(commandBuffer, *octree_itr, visibleBounds, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass, newRemainingOctrees, newRemainingOctreesTestResults, remainingOctreesTestResultsOnly, true, false); } remainingOctrees = newRemainingOctrees; remainingOctreesTestResults = newRemainingOctreesTestResults; @@ -171,11 +171,11 @@ void KRScene::render(KRCamera *pCamera, unordered_map &visibleBounds, newRemainingOctrees.clear(); newRemainingOctreesTestResults.clear(); for(std::vector::iterator octree_itr = remainingOctreesTestResultsOnly.begin(); octree_itr != remainingOctreesTestResultsOnly.end(); octree_itr++) { - render(*octree_itr, visibleBounds, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass, newRemainingOctrees, newRemainingOctreesTestResults, remainingOctreesTestResultsOnly, true, true); + render(commandBuffer, *octree_itr, visibleBounds, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass, newRemainingOctrees, newRemainingOctreesTestResults, remainingOctreesTestResultsOnly, true, true); } } -void KRScene::render(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) +void KRScene::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) { if(pOctreeNode) { @@ -360,14 +360,14 @@ void KRScene::render(KROctreeNode *pOctreeNode, unordered_map &visibl // Render objects that are at this octree level for(std::set::iterator itr=pOctreeNode->getSceneNodes().begin(); itr != pOctreeNode->getSceneNodes().end(); itr++) { //assert(pOctreeNode->getBounds().contains((*itr)->getBounds())); // Sanity check - (*itr)->render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + (*itr)->render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); } // Render child octrees const int *childOctreeOrder = renderPass == KRNode::RENDER_PASS_FORWARD_TRANSPARENT || renderPass == KRNode::RENDER_PASS_ADDITIVE_PARTICLES || renderPass == KRNode::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE ? viewport.getBackToFrontOrder() : viewport.getFrontToBackOrder(); for(int i=0; i<8; i++) { - render(pOctreeNode->getChildren()[childOctreeOrder[i]], visibleBounds, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass, remainingOctrees, remainingOctreesTestResults, remainingOctreesTestResultsOnly, false, false); + render(commandBuffer, pOctreeNode->getChildren()[childOctreeOrder[i]], visibleBounds, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass, remainingOctrees, remainingOctreesTestResults, remainingOctreesTestResultsOnly, false, false); } // Remove lights added at this octree level from the stack diff --git a/kraken/KRScene.h b/kraken/KRScene.h index fe3994b..0608c0f 100755 --- a/kraken/KRScene.h +++ b/kraken/KRScene.h @@ -69,10 +69,10 @@ 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(GLint defaultFBO, float deltaTime, int width, int height); - void render(KRCamera *pCamera, unordered_map &visibleBounds, const KRViewport &viewport, KRNode::RenderPass renderPass, bool new_frame); + void renderFrame(VkCommandBuffer& commandBuffer, 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(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); + 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); void updateOctree(const KRViewport &viewport); void buildOctreeForTheFirstTime(); diff --git a/kraken/KRSprite.cpp b/kraken/KRSprite.cpp index 2266384..083d861 100755 --- a/kraken/KRSprite.cpp +++ b/kraken/KRSprite.cpp @@ -111,7 +111,7 @@ AABB KRSprite::getBounds() { } -void KRSprite::render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { +void KRSprite::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass) { if(m_lod_visible >= LOD_VISIBILITY_PRESTREAM && renderPass == KRNode::RENDER_PASS_PRESTREAM) { // Pre-stream sprites, even if the alpha is zero @@ -128,7 +128,7 @@ void KRSprite::render(KRCamera *pCamera, std::vector &point_ligh if(m_lod_visible <= LOD_VISIBILITY_PRESTREAM) return; - KRNode::render(pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); + KRNode::render(commandBuffer, pCamera, point_lights, directional_lights, spot_lights, viewport, renderPass); if(renderPass == KRNode::RENDER_PASS_ADDITIVE_PARTICLES) { diff --git a/kraken/KRSprite.h b/kraken/KRSprite.h index e8626ac..fea6b94 100755 --- a/kraken/KRSprite.h +++ b/kraken/KRSprite.h @@ -51,7 +51,7 @@ public: void setSpriteAlpha(float alpha); float getSpriteAlpha() const; - virtual void render(KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); + virtual void render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, KRNode::RenderPass renderPass); virtual AABB getBounds();