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/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
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue