Made use of RenderState

Former-commit-id: 500aba0d0dd60e7371dea6c219d6a5ccfdcbadf8
This commit is contained in:
Lynix 2013-06-18 00:38:18 +02:00
parent 88d3ec1ad1
commit 6c659410cd
3 changed files with 39 additions and 42 deletions

View File

@ -9,12 +9,11 @@
#include <Nazara/Prerequesites.hpp> #include <Nazara/Prerequesites.hpp>
#include <Nazara/Graphics/Background.hpp> #include <Nazara/Graphics/Background.hpp>
#include <Nazara/Renderer/Shader.hpp>
#include <Nazara/Renderer/Texture.hpp> #include <Nazara/Renderer/Texture.hpp>
#include <Nazara/Renderer/TextureSampler.hpp> #include <Nazara/Renderer/TextureSampler.hpp>
#include <Nazara/Utility/IndexBuffer.hpp>
class NzIndexBuffer; #include <Nazara/Utility/VertexBuffer.hpp>
class NzShader;
class NzVertexBuffer;
class NAZARA_API NzSkyboxBackground : public NzBackground class NAZARA_API NzSkyboxBackground : public NzBackground
{ {
@ -35,9 +34,9 @@ class NAZARA_API NzSkyboxBackground : public NzBackground
private: private:
NzTextureRef m_texture; NzTextureRef m_texture;
NzTextureSampler m_sampler; NzTextureSampler m_sampler;
NzIndexBuffer* m_indexBuffer; NzIndexBufferRef m_indexBuffer;
NzShader* m_shader; NzShaderRef m_shader;
NzVertexBuffer* m_vertexBuffer; NzVertexBufferRef m_vertexBuffer;
}; };
#endif // NAZARA_SKYBOXBACKGROUND_HPP #endif // NAZARA_SKYBOXBACKGROUND_HPP

View File

@ -114,6 +114,15 @@ namespace
return shader.release(); return shader.release();
} }
NzRenderStates BuildRenderStates()
{
NzRenderStates states;
states.parameters[nzRendererParameter_FaceCulling] = true;
states.faceCulling = nzFaceCulling_Front;
return states;
}
NzVertexBuffer* BuildVertexBuffer() NzVertexBuffer* BuildVertexBuffer()
{ {
std::unique_ptr<NzVertexDeclaration> declaration(new NzVertexDeclaration); std::unique_ptr<NzVertexDeclaration> declaration(new NzVertexDeclaration);
@ -158,6 +167,7 @@ namespace
static NzIndexBuffer* s_indexBuffer = nullptr; static NzIndexBuffer* s_indexBuffer = nullptr;
static NzShader* s_shader = nullptr; static NzShader* s_shader = nullptr;
static NzVertexBuffer* s_vertexBuffer = nullptr; static NzVertexBuffer* s_vertexBuffer = nullptr;
static unsigned int s_skyboxLocation;
} }
NzSkyboxBackground::NzSkyboxBackground() NzSkyboxBackground::NzSkyboxBackground()
@ -166,21 +176,18 @@ NzSkyboxBackground::NzSkyboxBackground()
s_indexBuffer = BuildIndexBuffer(); s_indexBuffer = BuildIndexBuffer();
if (!s_shader) if (!s_shader)
{
s_shader = BuildShader(); s_shader = BuildShader();
s_skyboxLocation = s_shader->GetUniformLocation("Skybox");
}
if (!s_vertexBuffer) if (!s_vertexBuffer)
s_vertexBuffer = BuildVertexBuffer(); s_vertexBuffer = BuildVertexBuffer();
m_indexBuffer = s_indexBuffer; m_indexBuffer = s_indexBuffer;
m_indexBuffer->AddResourceReference();
m_shader = s_shader; m_shader = s_shader;
m_shader->AddResourceReference();
m_sampler.SetWrapMode(nzSamplerWrap_Clamp); // Nécessaire pour ne pas voir les côtés m_sampler.SetWrapMode(nzSamplerWrap_Clamp); // Nécessaire pour ne pas voir les côtés
m_vertexBuffer = s_vertexBuffer; m_vertexBuffer = s_vertexBuffer;
m_vertexBuffer->AddResourceReference();
} }
NzSkyboxBackground::NzSkyboxBackground(NzTexture* cubemapTexture) : NzSkyboxBackground::NzSkyboxBackground(NzTexture* cubemapTexture) :
@ -191,37 +198,33 @@ NzSkyboxBackground()
NzSkyboxBackground::~NzSkyboxBackground() NzSkyboxBackground::~NzSkyboxBackground()
{ {
if (m_indexBuffer->RemoveResourceReference()) if (m_indexBuffer.Reset())
s_indexBuffer = nullptr; s_indexBuffer = nullptr;
if (m_shader->RemoveResourceReference()) if (m_shader.Reset())
s_shader = nullptr; s_shader = nullptr;
if (m_vertexBuffer->RemoveResourceReference()) if (m_vertexBuffer.Reset())
s_vertexBuffer = nullptr; s_vertexBuffer = nullptr;
} }
void NzSkyboxBackground::Draw(const NzScene* scene) const void NzSkyboxBackground::Draw(const NzScene* scene) const
{ {
nzUInt8 textureUnit; static NzRenderStates states(BuildRenderStates());
m_shader->SendTexture(m_shader->GetUniformLocation("Skybox"), m_texture, &textureUnit);
m_shader->SendInteger(s_skyboxLocation, 0);
const NzMatrix4f& viewMatrix = NzRenderer::GetMatrix(nzMatrixType_View); const NzMatrix4f& viewMatrix = NzRenderer::GetMatrix(nzMatrixType_View);
NzMatrix4f skyboxMatrix(viewMatrix); NzMatrix4f skyboxMatrix(viewMatrix);
skyboxMatrix.SetTranslation(NzVector3f::Zero()); 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::SetIndexBuffer(m_indexBuffer);
NzRenderer::SetMatrix(nzMatrixType_View, skyboxMatrix); NzRenderer::SetMatrix(nzMatrixType_View, skyboxMatrix);
NzRenderer::SetMatrix(nzMatrixType_World, NzMatrix4f::Scale(NzVector3f(scene->GetActiveCamera()->GetZNear()))); NzRenderer::SetMatrix(nzMatrixType_World, NzMatrix4f::Scale(NzVector3f(scene->GetActiveCamera()->GetZNear())));
NzRenderer::SetRenderStates(states);
NzRenderer::SetShader(m_shader); NzRenderer::SetShader(m_shader);
NzRenderer::SetTextureSampler(textureUnit, m_sampler); NzRenderer::SetTexture(0, m_texture);
NzRenderer::SetTextureSampler(0, m_sampler);
NzRenderer::SetVertexBuffer(m_vertexBuffer); NzRenderer::SetVertexBuffer(m_vertexBuffer);
NzRenderer::DrawIndexedPrimitives(nzPrimitiveMode_TriangleList, 0, 36); NzRenderer::DrawIndexedPrimitives(nzPrimitiveMode_TriangleList, 0, 36);

View File

@ -5,6 +5,7 @@
#include <Nazara/Renderer/OpenGL.hpp> #include <Nazara/Renderer/OpenGL.hpp>
#include <Nazara/Renderer/DebugDrawer.hpp> #include <Nazara/Renderer/DebugDrawer.hpp>
#include <Nazara/Renderer/Renderer.hpp> #include <Nazara/Renderer/Renderer.hpp>
#include <Nazara/Renderer/RenderStates.hpp>
#include <Nazara/Renderer/Shader.hpp> #include <Nazara/Renderer/Shader.hpp>
#include <Nazara/Renderer/ShaderBuilder.hpp> #include <Nazara/Renderer/ShaderBuilder.hpp>
#include <Nazara/Utility/BufferMapper.hpp> #include <Nazara/Utility/BufferMapper.hpp>
@ -21,13 +22,12 @@ namespace
{ {
static NzColor primaryColor = NzColor::Red; static NzColor primaryColor = NzColor::Red;
static NzColor secondaryColor = NzColor::Green; static NzColor secondaryColor = NzColor::Green;
static NzRenderStates renderStates;
static const NzShader* shader = nullptr; static const NzShader* shader = nullptr;
static NzVertexBuffer* vertexBuffer = nullptr; static NzVertexBuffer* vertexBuffer = nullptr;
static NzVertexDeclaration* vertexDeclaration = nullptr; static NzVertexDeclaration* vertexDeclaration = nullptr;
static bool depthBufferEnabled = true; static bool depthBufferEnabled = true;
static bool initialized = false; static bool initialized = false;
static float lineWidth = 1.5f;
static float pointSize = 3.f;
static int colorLocation = -1; static int colorLocation = -1;
} }
@ -128,8 +128,7 @@ void NzDebugDrawer::Draw(const NzBoxf& box)
mapper.Unmap(); mapper.Unmap();
NzRenderer::Enable(nzRendererParameter_DepthBuffer, depthBufferEnabled); NzRenderer::SetRenderStates(renderStates);
NzRenderer::SetLineWidth(lineWidth);
NzRenderer::SetShader(shader); NzRenderer::SetShader(shader);
NzRenderer::SetVertexBuffer(vertexBuffer); NzRenderer::SetVertexBuffer(vertexBuffer);
@ -216,8 +215,7 @@ void NzDebugDrawer::Draw(const NzFrustumf& frustum)
mapper.Unmap(); mapper.Unmap();
NzRenderer::Enable(nzRendererParameter_DepthBuffer, depthBufferEnabled); NzRenderer::SetRenderStates(renderStates);
NzRenderer::SetLineWidth(lineWidth);
NzRenderer::SetShader(shader); NzRenderer::SetShader(shader);
NzRenderer::SetVertexBuffer(vertexBuffer); NzRenderer::SetVertexBuffer(vertexBuffer);
@ -299,8 +297,7 @@ void NzDebugDrawer::Draw(const NzOrientedBoxf& orientedBox)
mapper.Unmap(); mapper.Unmap();
NzRenderer::Enable(nzRendererParameter_DepthBuffer, depthBufferEnabled); NzRenderer::SetRenderStates(renderStates);
NzRenderer::SetLineWidth(lineWidth);
NzRenderer::SetShader(shader); NzRenderer::SetShader(shader);
NzRenderer::SetVertexBuffer(vertexBuffer); NzRenderer::SetVertexBuffer(vertexBuffer);
@ -348,9 +345,7 @@ void NzDebugDrawer::Draw(const NzSkeleton* skeleton)
if (vertexCount > 0) if (vertexCount > 0)
{ {
NzRenderer::Enable(nzRendererParameter_DepthBuffer, depthBufferEnabled); NzRenderer::SetRenderStates(renderStates);
NzRenderer::SetLineWidth(lineWidth);
NzRenderer::SetPointSize(pointSize);
NzRenderer::SetShader(shader); NzRenderer::SetShader(shader);
NzRenderer::SetVertexBuffer(vertexBuffer); NzRenderer::SetVertexBuffer(vertexBuffer);
@ -501,17 +496,17 @@ void NzDebugDrawer::DrawTangents(const NzSubMesh* subMesh)
void NzDebugDrawer::EnableDepthBuffer(bool depthBuffer) void NzDebugDrawer::EnableDepthBuffer(bool depthBuffer)
{ {
depthBufferEnabled = depthBuffer; renderStates.parameters[nzRendererParameter_DepthBuffer] = depthBuffer;
} }
float NzDebugDrawer::GetLineWidth() float NzDebugDrawer::GetLineWidth()
{ {
return lineWidth; return renderStates.lineWidth;
} }
float NzDebugDrawer::GetPointSize() float NzDebugDrawer::GetPointSize()
{ {
return pointSize; return renderStates.pointSize;
} }
NzColor NzDebugDrawer::GetPrimaryColor() NzColor NzDebugDrawer::GetPrimaryColor()
@ -582,12 +577,12 @@ bool NzDebugDrawer::IsDepthBufferEnabled()
void NzDebugDrawer::SetLineWidth(float width) void NzDebugDrawer::SetLineWidth(float width)
{ {
lineWidth = width; renderStates.lineWidth = width;
} }
void NzDebugDrawer::SetPointSize(float size) void NzDebugDrawer::SetPointSize(float size)
{ {
pointSize = size; renderStates.pointSize = size;
} }
void NzDebugDrawer::SetPrimaryColor(const NzColor& color) void NzDebugDrawer::SetPrimaryColor(const NzColor& color)