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/Graphics/Background.hpp>
#include <Nazara/Renderer/Shader.hpp>
#include <Nazara/Renderer/Texture.hpp>
#include <Nazara/Renderer/TextureSampler.hpp>
class NzIndexBuffer;
class NzShader;
class NzVertexBuffer;
#include <Nazara/Utility/IndexBuffer.hpp>
#include <Nazara/Utility/VertexBuffer.hpp>
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

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

View File

@ -5,6 +5,7 @@
#include <Nazara/Renderer/OpenGL.hpp>
#include <Nazara/Renderer/DebugDrawer.hpp>
#include <Nazara/Renderer/Renderer.hpp>
#include <Nazara/Renderer/RenderStates.hpp>
#include <Nazara/Renderer/Shader.hpp>
#include <Nazara/Renderer/ShaderBuilder.hpp>
#include <Nazara/Utility/BufferMapper.hpp>
@ -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)