diff --git a/include/Nazara/Renderer/Renderer.hpp b/include/Nazara/Renderer/Renderer.hpp index 1ba746fe3..5431c150d 100644 --- a/include/Nazara/Renderer/Renderer.hpp +++ b/include/Nazara/Renderer/Renderer.hpp @@ -43,8 +43,6 @@ class NAZARA_API NzRenderer static void Enable(nzRendererParameter parameter, bool enable); - static void FillInstancingBuffer(const InstancingData* instancingData, unsigned int instanceCount); - static void Flush(); static float GetLineWidth(); @@ -74,6 +72,7 @@ class NAZARA_API NzRenderer static void SetFaceCulling(nzFaceCulling cullingMode); static void SetFaceFilling(nzFaceFilling fillingMode); static bool SetIndexBuffer(const NzIndexBuffer* indexBuffer); + static void SetInstancingData(const InstancingData* instancingData, unsigned int instanceCount); static void SetLineWidth(float size); static void SetMatrix(nzMatrixType type, const NzMatrix4f& matrix); static void SetPointSize(float size); diff --git a/src/Nazara/3D/Scene.cpp b/src/Nazara/3D/Scene.cpp index da946666b..c31d8e23e 100644 --- a/src/Nazara/3D/Scene.cpp +++ b/src/Nazara/3D/Scene.cpp @@ -261,7 +261,7 @@ void NzScene::Draw() m_impl->instancingData[count++].worldMatrix = matrix; if (count == m_impl->instancingData.size()) { - NzRenderer::FillInstancingBuffer(&m_impl->instancingData[0], count); + NzRenderer::SetInstancingData(&m_impl->instancingData[0], count); instancedDraw(count, primitiveType, 0, indexCount); count = 0; @@ -270,7 +270,7 @@ void NzScene::Draw() if (count > 0) { - NzRenderer::FillInstancingBuffer(&m_impl->instancingData[0], count); + NzRenderer::SetInstancingData(&m_impl->instancingData[0], count); instancedDraw(count, primitiveType, 0, indexCount); } } diff --git a/src/Nazara/Renderer/Renderer.cpp b/src/Nazara/Renderer/Renderer.cpp index f6adcb768..38d3faf41 100644 --- a/src/Nazara/Renderer/Renderer.cpp +++ b/src/Nazara/Renderer/Renderer.cpp @@ -344,40 +344,16 @@ void NzRenderer::Enable(nzRendererParameter parameter, bool enable) } } -void NzRenderer::FillInstancingBuffer(const NzRenderer::InstancingData* instancingData, unsigned int instanceCount) +void NzRenderer::Flush() { - #if NAZARA_RENDERER_SAFE - if (!s_capabilities[nzRendererCap_Instancing]) + #ifdef NAZARA_DEBUG + if (NzContext::GetCurrent() == nullptr) { - NazaraError("Instancing not supported"); - return; - } - - if (!instancingData) - { - NazaraError("Instancing data must be valid"); - return; - } - - if (instanceCount == 0) - { - NazaraError("Instance count must be over 0"); - return; - } - - if (instanceCount > NAZARA_RENDERER_INSTANCING_MAX) - { - NazaraError("Instance count is over maximum instance count (" + NzString::Number(instanceCount) + " >= " + NzString::Number(NAZARA_RENDERER_INSTANCING_MAX) + ')'); + NazaraError("No active context"); return; } #endif - if (!s_instancingBuffer->Fill(instancingData, 0, instanceCount, true)) - NazaraError("Failed to fill instancing buffer"); -} - -void NzRenderer::Flush() -{ glFlush(); } @@ -846,6 +822,38 @@ bool NzRenderer::SetIndexBuffer(const NzIndexBuffer* indexBuffer) return true; } +void NzRenderer::SetInstancingData(const NzRenderer::InstancingData* instancingData, unsigned int instanceCount) +{ + #if NAZARA_RENDERER_SAFE + if (!s_capabilities[nzRendererCap_Instancing]) + { + NazaraError("Instancing not supported"); + return; + } + + if (!instancingData) + { + NazaraError("Instancing data must be valid"); + return; + } + + if (instanceCount == 0) + { + NazaraError("Instance count must be over 0"); + return; + } + + if (instanceCount > NAZARA_RENDERER_INSTANCING_MAX) + { + NazaraError("Instance count is over maximum instance count (" + NzString::Number(instanceCount) + " >= " + NzString::Number(NAZARA_RENDERER_INSTANCING_MAX) + ')'); + return; + } + #endif + + if (!s_instancingBuffer->Fill(instancingData, 0, instanceCount, true)) + NazaraError("Failed to fill instancing buffer"); +} + void NzRenderer::SetLineWidth(float width) { #ifdef NAZARA_DEBUG