diff --git a/include/Nazara/Graphics/SkyboxBackground.hpp b/include/Nazara/Graphics/SkyboxBackground.hpp index bc10dd96e..a4069c7e5 100644 --- a/include/Nazara/Graphics/SkyboxBackground.hpp +++ b/include/Nazara/Graphics/SkyboxBackground.hpp @@ -9,12 +9,11 @@ #include #include +#include #include #include - -class NzIndexBuffer; -class NzShader; -class NzVertexBuffer; +#include +#include class NAZARA_API NzSkyboxBackground : public NzBackground { @@ -35,9 +34,9 @@ class NAZARA_API NzSkyboxBackground : public NzBackground private: NzTextureRef m_texture; NzTextureSampler m_sampler; - NzIndexBuffer* m_indexBuffer; - NzShader* m_shader; - NzVertexBuffer* m_vertexBuffer; + NzIndexBufferRef m_indexBuffer; + NzShaderRef m_shader; + NzVertexBufferRef m_vertexBuffer; }; #endif // NAZARA_SKYBOXBACKGROUND_HPP diff --git a/src/Nazara/Graphics/SkyboxBackground.cpp b/src/Nazara/Graphics/SkyboxBackground.cpp index df8e1db9f..6cecccebd 100644 --- a/src/Nazara/Graphics/SkyboxBackground.cpp +++ b/src/Nazara/Graphics/SkyboxBackground.cpp @@ -114,6 +114,15 @@ namespace return shader.release(); } + NzRenderStates BuildRenderStates() + { + NzRenderStates states; + states.parameters[nzRendererParameter_FaceCulling] = true; + states.faceCulling = nzFaceCulling_Front; + + return states; + } + NzVertexBuffer* BuildVertexBuffer() { std::unique_ptr declaration(new NzVertexDeclaration); @@ -158,6 +167,7 @@ namespace static NzIndexBuffer* s_indexBuffer = nullptr; static NzShader* s_shader = nullptr; static NzVertexBuffer* s_vertexBuffer = nullptr; + static unsigned int s_skyboxLocation; } NzSkyboxBackground::NzSkyboxBackground() @@ -166,21 +176,18 @@ NzSkyboxBackground::NzSkyboxBackground() s_indexBuffer = BuildIndexBuffer(); if (!s_shader) + { s_shader = BuildShader(); + s_skyboxLocation = s_shader->GetUniformLocation("Skybox"); + } if (!s_vertexBuffer) s_vertexBuffer = BuildVertexBuffer(); m_indexBuffer = s_indexBuffer; - m_indexBuffer->AddResourceReference(); - m_shader = s_shader; - m_shader->AddResourceReference(); - m_sampler.SetWrapMode(nzSamplerWrap_Clamp); // Nécessaire pour ne pas voir les côtés - m_vertexBuffer = s_vertexBuffer; - m_vertexBuffer->AddResourceReference(); } NzSkyboxBackground::NzSkyboxBackground(NzTexture* cubemapTexture) : @@ -191,37 +198,33 @@ NzSkyboxBackground() NzSkyboxBackground::~NzSkyboxBackground() { - if (m_indexBuffer->RemoveResourceReference()) + if (m_indexBuffer.Reset()) s_indexBuffer = nullptr; - if (m_shader->RemoveResourceReference()) + if (m_shader.Reset()) s_shader = nullptr; - if (m_vertexBuffer->RemoveResourceReference()) + if (m_vertexBuffer.Reset()) s_vertexBuffer = nullptr; } void NzSkyboxBackground::Draw(const NzScene* scene) const { - nzUInt8 textureUnit; - m_shader->SendTexture(m_shader->GetUniformLocation("Skybox"), m_texture, &textureUnit); + static NzRenderStates states(BuildRenderStates()); + + m_shader->SendInteger(s_skyboxLocation, 0); const NzMatrix4f& viewMatrix = NzRenderer::GetMatrix(nzMatrixType_View); NzMatrix4f skyboxMatrix(viewMatrix); skyboxMatrix.SetTranslation(NzVector3f::Zero()); - NzRenderer::Enable(nzRendererParameter_Blend, false); - NzRenderer::Enable(nzRendererParameter_DepthBuffer, false); - NzRenderer::Enable(nzRendererParameter_FaceCulling, true); - - NzRenderer::SetDepthFunc(nzRendererComparison_Less); - NzRenderer::SetFaceCulling(nzFaceCulling_Front); - NzRenderer::SetFaceFilling(nzFaceFilling_Fill); NzRenderer::SetIndexBuffer(m_indexBuffer); NzRenderer::SetMatrix(nzMatrixType_View, skyboxMatrix); NzRenderer::SetMatrix(nzMatrixType_World, NzMatrix4f::Scale(NzVector3f(scene->GetActiveCamera()->GetZNear()))); + NzRenderer::SetRenderStates(states); NzRenderer::SetShader(m_shader); - NzRenderer::SetTextureSampler(textureUnit, m_sampler); + NzRenderer::SetTexture(0, m_texture); + NzRenderer::SetTextureSampler(0, m_sampler); NzRenderer::SetVertexBuffer(m_vertexBuffer); NzRenderer::DrawIndexedPrimitives(nzPrimitiveMode_TriangleList, 0, 36); diff --git a/src/Nazara/Renderer/DebugDrawer.cpp b/src/Nazara/Renderer/DebugDrawer.cpp index 0f20549b0..570f070df 100644 --- a/src/Nazara/Renderer/DebugDrawer.cpp +++ b/src/Nazara/Renderer/DebugDrawer.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -21,13 +22,12 @@ namespace { static NzColor primaryColor = NzColor::Red; static NzColor secondaryColor = NzColor::Green; + static NzRenderStates renderStates; static const NzShader* shader = nullptr; static NzVertexBuffer* vertexBuffer = nullptr; static NzVertexDeclaration* vertexDeclaration = nullptr; static bool depthBufferEnabled = true; static bool initialized = false; - static float lineWidth = 1.5f; - static float pointSize = 3.f; static int colorLocation = -1; } @@ -128,8 +128,7 @@ void NzDebugDrawer::Draw(const NzBoxf& box) mapper.Unmap(); - NzRenderer::Enable(nzRendererParameter_DepthBuffer, depthBufferEnabled); - NzRenderer::SetLineWidth(lineWidth); + NzRenderer::SetRenderStates(renderStates); NzRenderer::SetShader(shader); NzRenderer::SetVertexBuffer(vertexBuffer); @@ -216,8 +215,7 @@ void NzDebugDrawer::Draw(const NzFrustumf& frustum) mapper.Unmap(); - NzRenderer::Enable(nzRendererParameter_DepthBuffer, depthBufferEnabled); - NzRenderer::SetLineWidth(lineWidth); + NzRenderer::SetRenderStates(renderStates); NzRenderer::SetShader(shader); NzRenderer::SetVertexBuffer(vertexBuffer); @@ -299,8 +297,7 @@ void NzDebugDrawer::Draw(const NzOrientedBoxf& orientedBox) mapper.Unmap(); - NzRenderer::Enable(nzRendererParameter_DepthBuffer, depthBufferEnabled); - NzRenderer::SetLineWidth(lineWidth); + NzRenderer::SetRenderStates(renderStates); NzRenderer::SetShader(shader); NzRenderer::SetVertexBuffer(vertexBuffer); @@ -348,9 +345,7 @@ void NzDebugDrawer::Draw(const NzSkeleton* skeleton) if (vertexCount > 0) { - NzRenderer::Enable(nzRendererParameter_DepthBuffer, depthBufferEnabled); - NzRenderer::SetLineWidth(lineWidth); - NzRenderer::SetPointSize(pointSize); + NzRenderer::SetRenderStates(renderStates); NzRenderer::SetShader(shader); NzRenderer::SetVertexBuffer(vertexBuffer); @@ -501,17 +496,17 @@ void NzDebugDrawer::DrawTangents(const NzSubMesh* subMesh) void NzDebugDrawer::EnableDepthBuffer(bool depthBuffer) { - depthBufferEnabled = depthBuffer; + renderStates.parameters[nzRendererParameter_DepthBuffer] = depthBuffer; } float NzDebugDrawer::GetLineWidth() { - return lineWidth; + return renderStates.lineWidth; } float NzDebugDrawer::GetPointSize() { - return pointSize; + return renderStates.pointSize; } NzColor NzDebugDrawer::GetPrimaryColor() @@ -582,12 +577,12 @@ bool NzDebugDrawer::IsDepthBufferEnabled() void NzDebugDrawer::SetLineWidth(float width) { - lineWidth = width; + renderStates.lineWidth = width; } void NzDebugDrawer::SetPointSize(float size) { - pointSize = size; + renderStates.pointSize = size; } void NzDebugDrawer::SetPrimaryColor(const NzColor& color)