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

@@ -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<NzVertexDeclaration> 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);