From b306670e9c32c9aa4d1a9dc7eddb2e1ba27c634f Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Mon, 28 Feb 2022 20:14:22 -0800 Subject: [PATCH] Refactoring to pass command buffer through render calls, enabling Vulkan version of KRVBOData::Bind to replace the OpenGL version --- kraken/KRAmbientZone.cpp | 2 +- kraken/KRAudioSource.cpp | 2 +- kraken/KRBone.cpp | 2 +- kraken/KRCamera.cpp | 12 ++++++------ kraken/KRCamera.h | 2 +- kraken/KRCollider.cpp | 2 +- kraken/KRDirectionalLight.cpp | 2 +- kraken/KRLight.cpp | 8 ++++---- kraken/KRMesh.cpp | 18 +++++++++--------- kraken/KRMesh.h | 4 ++-- kraken/KRMeshManager.cpp | 23 ++++------------------- kraken/KRMeshManager.h | 5 ++--- kraken/KRModel.cpp | 2 +- kraken/KRParticleSystemNewtonian.cpp | 2 +- kraken/KRPointLight.cpp | 2 +- kraken/KRReverbZone.cpp | 2 +- kraken/KRScene.cpp | 2 +- kraken/KRSprite.cpp | 2 +- 18 files changed, 39 insertions(+), 55 deletions(-) diff --git a/kraken/KRAmbientZone.cpp b/kraken/KRAmbientZone.cpp index aabb8e6..ba0f0fe 100755 --- a/kraken/KRAmbientZone.cpp +++ b/kraken/KRAmbientZone.cpp @@ -148,7 +148,7 @@ void KRAmbientZone::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, st std::vector sphereModels = getContext().getMeshManager()->getModel("__sphere"); if(sphereModels.size()) { for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) { - sphereModels[0]->renderSubmesh(i, renderPass, getName(), "visualize_overlay", 1.0f); + sphereModels[0]->renderSubmesh(commandBuffer, i, renderPass, getName(), "visualize_overlay", 1.0f); } } diff --git a/kraken/KRAudioSource.cpp b/kraken/KRAudioSource.cpp index 07500db..a7a746b 100755 --- a/kraken/KRAudioSource.cpp +++ b/kraken/KRAudioSource.cpp @@ -215,7 +215,7 @@ void KRAudioSource::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, st std::vector sphereModels = getContext().getMeshManager()->getModel("__sphere"); if(sphereModels.size()) { for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) { - sphereModels[0]->renderSubmesh(i, renderPass, getName(), "visualize_overlay", 1.0f); + sphereModels[0]->renderSubmesh(commandBuffer, i, renderPass, getName(), "visualize_overlay", 1.0f); } } diff --git a/kraken/KRBone.cpp b/kraken/KRBone.cpp index f29d9d5..bb44e5b 100755 --- a/kraken/KRBone.cpp +++ b/kraken/KRBone.cpp @@ -97,7 +97,7 @@ void KRBone::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vect std::vector sphereModels = getContext().getMeshManager()->getModel("__sphere"); if(sphereModels.size()) { for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) { - sphereModels[0]->renderSubmesh(i, renderPass, getName(), "visualize_overlay", 1.0f); + sphereModels[0]->renderSubmesh(commandBuffer, i, renderPass, getName(), "visualize_overlay", 1.0f); } } diff --git a/kraken/KRCamera.cpp b/kraken/KRCamera.cpp index b04f49f..9b1591a 100755 --- a/kraken/KRCamera.cpp +++ b/kraken/KRCamera.cpp @@ -324,7 +324,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLi getContext().getTextureManager()->selectTexture(0, m_pSkyBoxTexture, 0.0f, KRTexture::TEXTURE_USAGE_SKY_CUBE); // Render a full screen quad - m_pContext->getMeshManager()->bindVBO(&getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); + m_pContext->getMeshManager()->bindVBO(commandBuffer, &getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)); } @@ -482,7 +482,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLi KRPipeline *pVisShader = getContext().getPipelineManager()->getPipeline("visualize_overlay", this, std::vector(), std::vector(), std::vector(), 0, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, KRNode::RENDER_PASS_FORWARD_TRANSPARENT); - m_pContext->getMeshManager()->bindVBO(&getContext().getMeshManager()->KRENGINE_VBO_DATA_3D_CUBE_VERTICES, 1.0f); + m_pContext->getMeshManager()->bindVBO(commandBuffer, &getContext().getMeshManager()->KRENGINE_VBO_DATA_3D_CUBE_VERTICES, 1.0f); for(unordered_map::iterator itr=m_viewport.getVisibleBounds().begin(); itr != m_viewport.getVisibleBounds().end(); itr++) { Matrix4 matModel = Matrix4(); matModel.scale((*itr).first.size() * 0.5f); @@ -503,7 +503,7 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, GLint defaultFBO, GLi GL_PUSH_GROUP_MARKER("Post Processing"); GLDEBUG(glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO)); - renderPost(); + renderPost(commandBuffer); m_pContext->getMeshManager()->unbindVBO(); GL_POP_GROUP_MARKER; @@ -669,7 +669,7 @@ void KRCamera::destroyBuffers() } } -void KRCamera::renderPost() +void KRCamera::renderPost(VkCommandBuffer& commandBuffer) { // Disable alpha blending GLDEBUG(glDisable(GL_BLEND)); @@ -712,7 +712,7 @@ void KRCamera::renderPost() } // Update attribute values. - m_pContext->getMeshManager()->bindVBO(&getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); + m_pContext->getMeshManager()->bindVBO(commandBuffer, &getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)); @@ -891,7 +891,7 @@ void KRCamera::renderPost() m_pContext->getTextureManager()->selectTexture(0, m_pContext->getTextureManager()->getTexture("font"), 0.0f, KRTexture::TEXTURE_USAGE_UI); KRDataBlock index_data; - m_pContext->getMeshManager()->bindVBO(m_debug_text_vertices, index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA), true, 1.0f + m_pContext->getMeshManager()->bindVBO(commandBuffer, m_debug_text_vertices, index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA), true, 1.0f #if KRENGINE_DEBUG_GPU_LABELS , "Debug Text" diff --git a/kraken/KRCamera.h b/kraken/KRCamera.h index 2d08f91..4a1c8cd 100755 --- a/kraken/KRCamera.h +++ b/kraken/KRCamera.h @@ -88,7 +88,7 @@ private: GLuint volumetricLightAccumulationBuffer, volumetricLightAccumulationTexture; - void renderPost(); + void renderPost(VkCommandBuffer& commandBuffer); void destroyBuffers(); diff --git a/kraken/KRCollider.cpp b/kraken/KRCollider.cpp index e0ecb16..c3b4d17 100755 --- a/kraken/KRCollider.cpp +++ b/kraken/KRCollider.cpp @@ -223,7 +223,7 @@ void KRCollider::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std:: for(int i=0; i < m_models[0]->getSubmeshCount(); i++) { - m_models[0]->renderSubmesh(i, renderPass, getName(), "visualize_overlay", 1.0f); + m_models[0]->renderSubmesh(commandBuffer, i, renderPass, getName(), "visualize_overlay", 1.0f); } // Enable alpha blending diff --git a/kraken/KRDirectionalLight.cpp b/kraken/KRDirectionalLight.cpp index a133929..7e67203 100755 --- a/kraken/KRDirectionalLight.cpp +++ b/kraken/KRDirectionalLight.cpp @@ -153,7 +153,7 @@ void KRDirectionalLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamer GLDEBUG(glDisable(GL_DEPTH_TEST)); // Render a full screen quad - m_pContext->getMeshManager()->bindVBO(&getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); + m_pContext->getMeshManager()->bindVBO(commandBuffer, &getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)); } } diff --git a/kraken/KRLight.cpp b/kraken/KRLight.cpp index 57592c0..402c094 100755 --- a/kraken/KRLight.cpp +++ b/kraken/KRLight.cpp @@ -268,7 +268,7 @@ void KRLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vec pParticleShader->setUniform(KRPipeline::KRENGINE_UNIFORM_FLARE_SIZE, m_dust_particle_size); KRDataBlock particle_index_data; - m_pContext->getMeshManager()->bindVBO(m_pContext->getMeshManager()->getRandomParticles(), particle_index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA), true, 1.0f + m_pContext->getMeshManager()->bindVBO(commandBuffer, m_pContext->getMeshManager()->getRandomParticles(), particle_index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA), true, 1.0f #if KRENGINE_DEBUG_GPU_LABELS , "Light Particles" #endif @@ -312,7 +312,7 @@ void KRLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vec pFogShader->setUniform(KRPipeline::KRENGINE_UNIFORM_LIGHT_COLOR, (m_color * pCamera->settings.volumetric_environment_intensity * m_intensity * -slice_spacing / 1000.0f)); KRDataBlock index_data; - m_pContext->getMeshManager()->bindVBO(m_pContext->getMeshManager()->getVolumetricLightingVertexes(), index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX), true, 1.0f + m_pContext->getMeshManager()->bindVBO(commandBuffer, m_pContext->getMeshManager()->getVolumetricLightingVertexes(), index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX), true, 1.0f #if KRENGINE_DEBUG_GPU_LABELS , "Participating Media" #endif @@ -345,7 +345,7 @@ void KRLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vec std::vector sphereModels = getContext().getMeshManager()->getModel("__sphere"); if(sphereModels.size()) { for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) { - sphereModels[0]->renderSubmesh(i, renderPass, getName(), "occlusion_test", 1.0f); + sphereModels[0]->renderSubmesh(commandBuffer, i, renderPass, getName(), "occlusion_test", 1.0f); } } @@ -385,7 +385,7 @@ void KRLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vec pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_ALPHA, 1.0f); pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_FLARE_SIZE, m_flareSize); m_pContext->getTextureManager()->selectTexture(0, m_pFlareTexture, 0.0f, KRTexture::TEXTURE_USAGE_LIGHT_FLARE); - m_pContext->getMeshManager()->bindVBO(&getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); + m_pContext->getMeshManager()->bindVBO(commandBuffer, &getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)); } } diff --git a/kraken/KRMesh.cpp b/kraken/KRMesh.cpp index aa82e9a..e907472 100755 --- a/kraken/KRMesh.cpp +++ b/kraken/KRMesh.cpp @@ -240,7 +240,7 @@ kraken_stream_level KRMesh::getStreamLevel() return stream_level; } -void KRMesh::render(const std::string &object_name, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, const Matrix4 &matModel, KRTexture *pLightMap, KRNode::RenderPass renderPass, const std::vector &bones, const Vector3 &rim_color, float rim_power, float lod_coverage) { +void KRMesh::render(VkCommandBuffer& commandBuffer, const std::string &object_name, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, const Matrix4 &matModel, KRTexture *pLightMap, KRNode::RenderPass renderPass, const std::vector &bones, const Vector3 &rim_color, float rim_power, float lod_coverage) { //fprintf(stderr, "Rendering model: %s\n", m_name.c_str()); if(renderPass != KRNode::RENDER_PASS_ADDITIVE_PARTICLES && renderPass != KRNode::RENDER_PASS_PARTICLE_OCCLUSION && renderPass != KRNode::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE) { @@ -261,7 +261,7 @@ void KRMesh::render(const std::string &object_name, KRCamera *pCamera, std::vect if(!pMaterial->isTransparent()) { // Exclude transparent and semi-transparent meshes from shadow maps - renderSubmesh(iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); + renderSubmesh(commandBuffer, iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); } } @@ -283,19 +283,19 @@ void KRMesh::render(const std::string &object_name, KRCamera *pCamera, std::vect switch(pMaterial->getAlphaMode()) { case KRMaterial::KRMATERIAL_ALPHA_MODE_OPAQUE: // Non-transparent materials case KRMaterial::KRMATERIAL_ALPHA_MODE_TEST: // Alpha in diffuse texture is interpreted as punch-through when < 0.5 - renderSubmesh(iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); + renderSubmesh(commandBuffer, iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); break; case KRMaterial::KRMATERIAL_ALPHA_MODE_BLENDONESIDE: // Blended alpha with backface culling - renderSubmesh(iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); + renderSubmesh(commandBuffer, iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); break; case KRMaterial::KRMATERIAL_ALPHA_MODE_BLENDTWOSIDE: // Blended alpha rendered in two passes. First pass renders backfaces; second pass renders frontfaces. // Render back faces first GLDEBUG(glCullFace(GL_FRONT)); - renderSubmesh(iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); + renderSubmesh(commandBuffer, iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); // Render front faces second GLDEBUG(glCullFace(GL_BACK)); - renderSubmesh(iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); + renderSubmesh(commandBuffer, iSubmesh, renderPass, object_name, pMaterial->getName(), lod_coverage); break; } } @@ -426,7 +426,7 @@ void KRMesh::createDataBlocks(KRMeshManager::KRVBOData::vbo_type t) } } -void KRMesh::renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const std::string &object_name, const std::string &material_name, float lodCoverage) { +void KRMesh::renderSubmesh(VkCommandBuffer& commandBuffer, int iSubmesh, KRNode::RenderPass renderPass, const std::string &object_name, const std::string &material_name, float lodCoverage) { getSubmeshes(); Submesh *pSubmesh = m_submeshes[iSubmesh]; @@ -445,7 +445,7 @@ void KRMesh::renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const st KRMeshManager::KRVBOData *vbo_data_block = m_submeshes[iSubmesh]->vbo_data_blocks[vbo_index++]; assert(vbo_data_block->isVBOReady()); - m_pContext->getMeshManager()->bindVBO(vbo_data_block, lodCoverage); + m_pContext->getMeshManager()->bindVBO(commandBuffer, vbo_data_block, lodCoverage); int vertex_draw_count = cVertexes; @@ -467,7 +467,7 @@ void KRMesh::renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const st KRMeshManager::KRVBOData *vbo_data_block = m_submeshes[iSubmesh]->vbo_data_blocks[vbo_index++]; assert(vbo_data_block->isVBOReady()); - m_pContext->getMeshManager()->bindVBO(vbo_data_block, lodCoverage); + m_pContext->getMeshManager()->bindVBO(commandBuffer, vbo_data_block, lodCoverage); if(iVertex + cVertexes >= MAX_VBO_SIZE) { diff --git a/kraken/KRMesh.h b/kraken/KRMesh.h index 8005350..fc57431 100755 --- a/kraken/KRMesh.h +++ b/kraken/KRMesh.h @@ -112,7 +112,7 @@ public: std::vector > bone_weights; } mesh_info; - void render(const std::string &object_name, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, const Matrix4 &matModel, KRTexture *pLightMap, KRNode::RenderPass renderPass, const std::vector &bones, const Vector3 &rim_color, float rim_power, float lod_coverage = 0.0f); + void render(VkCommandBuffer& commandBuffer, const std::string &object_name, KRCamera *pCamera, std::vector &point_lights, std::vector &directional_lights, std::vector&spot_lights, const KRViewport &viewport, const Matrix4 &matModel, KRTexture *pLightMap, KRNode::RenderPass renderPass, const std::vector &bones, const Vector3 &rim_color, float rim_power, float lod_coverage = 0.0f); std::string m_lodBaseName; @@ -127,7 +127,7 @@ public: void optimize(); void optimizeIndexes(); - void renderSubmesh(int iSubmesh, KRNode::RenderPass renderPass, const std::string &object_name, const std::string &material_name, float lodCoverage); + void renderSubmesh(VkCommandBuffer& commandBuffer, int iSubmesh, KRNode::RenderPass renderPass, const std::string &object_name, const std::string &material_name, float lodCoverage); GLfloat getMaxDimension(); diff --git a/kraken/KRMeshManager.cpp b/kraken/KRMeshManager.cpp index cbe6286..41ed40a 100755 --- a/kraken/KRMeshManager.cpp +++ b/kraken/KRMeshManager.cpp @@ -185,7 +185,7 @@ void KRMeshManager::unbindVBO() { } } -void KRMeshManager::bindVBO(KRVBOData *vbo_data, float lodCoverage) +void KRMeshManager::bindVBO(VkCommandBuffer& commandBuffer, KRVBOData *vbo_data, float lodCoverage) { vbo_data->resetPoolExpiry(lodCoverage); @@ -209,7 +209,7 @@ void KRMeshManager::bindVBO(KRVBOData *vbo_data, float lodCoverage) m_vbosActive[vbo_data->m_data] = m_currentVBO; } - m_currentVBO->bind(); + m_currentVBO->bind(commandBuffer); } if(!used_vbo_data && vbo_data->getType() == KRVBOData::TEMPORARY) { @@ -323,7 +323,7 @@ void KRMeshManager::balanceVBOMemory(long &memoryRemaining, long &memoryRemainin */ } -void KRMeshManager::bindVBO(KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, float lodCoverage +void KRMeshManager::bindVBO(VkCommandBuffer& commandBuffer, KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, float lodCoverage #if KRENGINE_DEBUG_GPU_LABELS , const char* debug_label #endif @@ -335,7 +335,7 @@ void KRMeshManager::bindVBO(KRDataBlock &data, KRDataBlock &index_data, int vert #endif ); vbo_data->load(); - bindVBO(vbo_data, lodCoverage); + bindVBO(commandBuffer, vbo_data, lodCoverage); } void KRMeshManager::configureAttribs(__int32_t attributes) @@ -794,21 +794,6 @@ void KRMeshManager::KRVBOData::unload() m_is_vbo_ready = false; } -void KRMeshManager::KRVBOData::bind() -{ -#if GL_OES_vertex_array_object - GLDEBUG(glBindVertexArrayOES(m_vao_handle)); -#else - GLDEBUG(glBindBuffer(GL_ARRAY_BUFFER, m_vbo_handle)); - KRMeshManager::configureAttribs(m_vertex_attrib_flags); - if(m_vbo_handle_indexes == -1) { - GLDEBUG(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); - } else { - GLDEBUG(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vbo_handle_indexes)); - } -#endif -} - void KRMeshManager::KRVBOData::bind(VkCommandBuffer& commandBuffer) { VkBuffer vertexBuffers[] = { getVertexBuffer() }; diff --git a/kraken/KRMeshManager.h b/kraken/KRMeshManager.h index cc43848..04531b6 100755 --- a/kraken/KRMeshManager.h +++ b/kraken/KRMeshManager.h @@ -95,7 +95,6 @@ public: bool isVBOReady() { return m_is_vbo_ready; } void load(); void unload(); - void bind(); void bind(VkCommandBuffer& commandBuffer); // Disable copy constructors @@ -147,8 +146,8 @@ public: #endif }; - void bindVBO(KRVBOData *vbo_data, float lodCoverage); - void bindVBO(KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, float lodCoverage + void bindVBO(VkCommandBuffer& commandBuffer, KRVBOData *vbo_data, float lodCoverage); + void bindVBO(VkCommandBuffer& commandBuffer, KRDataBlock &data, KRDataBlock &index_data, int vertex_attrib_flags, bool static_vbo, float lodCoverage #if KRENGINE_DEBUG_GPU_LABELS , const char* debug_label #endif diff --git a/kraken/KRModel.cpp b/kraken/KRModel.cpp index 171dd76..45f5aaf 100755 --- a/kraken/KRModel.cpp +++ b/kraken/KRModel.cpp @@ -216,7 +216,7 @@ void KRModel::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::vec matModel = Quaternion::Create(Vector3::Forward(), Vector3::Normalize(camera_pos - model_center)).rotationMatrix() * matModel; } - pModel->render(getName(), pCamera, point_lights, directional_lights, spot_lights, viewport, matModel, m_pLightMap, renderPass, m_bones[pModel], m_rim_color, m_rim_power, lod_coverage); + pModel->render(commandBuffer, getName(), pCamera, point_lights, directional_lights, spot_lights, viewport, matModel, m_pLightMap, renderPass, m_bones[pModel], m_rim_color, m_rim_power, lod_coverage); } } } diff --git a/kraken/KRParticleSystemNewtonian.cpp b/kraken/KRParticleSystemNewtonian.cpp index 004a2d7..b5da8bd 100755 --- a/kraken/KRParticleSystemNewtonian.cpp +++ b/kraken/KRParticleSystemNewtonian.cpp @@ -104,7 +104,7 @@ void KRParticleSystemNewtonian::render(VkCommandBuffer& commandBuffer, KRCamera pParticleShader->setUniform(KRPipeline::KRENGINE_UNIFORM_FLARE_SIZE, 1.0f); KRDataBlock index_data; - m_pContext->getMeshManager()->bindVBO(m_pContext->getMeshManager()->getRandomParticles(), index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA), false, 1.0f + m_pContext->getMeshManager()->bindVBO(commandBuffer, m_pContext->getMeshManager()->getRandomParticles(), index_data, (1 << KRMesh::KRENGINE_ATTRIB_VERTEX) | (1 << KRMesh::KRENGINE_ATTRIB_TEXUVA), false, 1.0f #if KRENGINE_DEBUG_GPU_LABELS , "Newtonian Particles" diff --git a/kraken/KRPointLight.cpp b/kraken/KRPointLight.cpp index 7794c45..2a31dc5 100755 --- a/kraken/KRPointLight.cpp +++ b/kraken/KRPointLight.cpp @@ -124,7 +124,7 @@ void KRPointLight::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std GLDEBUG(glDisable(GL_DEPTH_TEST)); // Render a full screen quad - m_pContext->getMeshManager()->bindVBO(&m_pContext->getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); + m_pContext->getMeshManager()->bindVBO(commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)); } else { #if GL_OES_vertex_array_object diff --git a/kraken/KRReverbZone.cpp b/kraken/KRReverbZone.cpp index 1246182..0091e7a 100755 --- a/kraken/KRReverbZone.cpp +++ b/kraken/KRReverbZone.cpp @@ -147,7 +147,7 @@ void KRReverbZone::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std std::vector sphereModels = getContext().getMeshManager()->getModel("__sphere"); if(sphereModels.size()) { for(int i=0; i < sphereModels[0]->getSubmeshCount(); i++) { - sphereModels[0]->renderSubmesh(i, renderPass, getName(), "visualize_overlay", 1.0f); + sphereModels[0]->renderSubmesh(commandBuffer, i, renderPass, getName(), "visualize_overlay", 1.0f); } } diff --git a/kraken/KRScene.cpp b/kraken/KRScene.cpp index 4c02a2a..30bfa01 100755 --- a/kraken/KRScene.cpp +++ b/kraken/KRScene.cpp @@ -280,7 +280,7 @@ void KRScene::render(VkCommandBuffer& commandBuffer, KROctreeNode *pOctreeNode, Matrix4 mvpmatrix = matModel * viewport.getViewProjectionMatrix(); - getContext().getMeshManager()->bindVBO(&getContext().getMeshManager()->KRENGINE_VBO_DATA_3D_CUBE_VERTICES, 1.0f); + getContext().getMeshManager()->bindVBO(commandBuffer, &getContext().getMeshManager()->KRENGINE_VBO_DATA_3D_CUBE_VERTICES, 1.0f); // Enable additive blending if(renderPass != KRNode::RENDER_PASS_FORWARD_TRANSPARENT && renderPass != KRNode::RENDER_PASS_ADDITIVE_PARTICLES && renderPass != KRNode::RENDER_PASS_VOLUMETRIC_EFFECTS_ADDITIVE) { diff --git a/kraken/KRSprite.cpp b/kraken/KRSprite.cpp index 083d861..4c1f3d3 100755 --- a/kraken/KRSprite.cpp +++ b/kraken/KRSprite.cpp @@ -161,7 +161,7 @@ void KRSprite::render(VkCommandBuffer& commandBuffer, KRCamera *pCamera, std::ve if(getContext().getPipelineManager()->selectPipeline(*pCamera, pShader, viewport, getModelMatrix(), point_lights, directional_lights, spot_lights, 0, renderPass, Vector3::Zero(), 0.0f, Vector4::Zero())) { pShader->setUniform(KRPipeline::KRENGINE_UNIFORM_MATERIAL_ALPHA, m_spriteAlpha); m_pContext->getTextureManager()->selectTexture(0, m_pSpriteTexture, 0.0f, KRTexture::TEXTURE_USAGE_SPRITE); - m_pContext->getMeshManager()->bindVBO(&m_pContext->getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); + m_pContext->getMeshManager()->bindVBO(commandBuffer, &m_pContext->getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES, 1.0f); GLDEBUG(glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)); } }