Made use of RenderState
Former-commit-id: 500aba0d0dd60e7371dea6c219d6a5ccfdcbadf8
This commit is contained in:
parent
88d3ec1ad1
commit
6c659410cd
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue