Forced Backgrounds fragments depth to maximum (1)

Former-commit-id: 98af132b7cc61469af752d1210dfb03e0c9b63ec
This commit is contained in:
Lynix
2013-09-06 18:31:04 +02:00
parent f9363ca764
commit c1dc2884b0
9 changed files with 49 additions and 19 deletions

View File

@@ -47,28 +47,43 @@ namespace
{
const char* fragmentSource110 =
"#version 110\n"
"varying vec3 vTexCoord;\n"
"uniform samplerCube Skybox;\n"
"uniform float VertexDepth;\n"
"void main()\n"
"{\n"
" gl_FragColor = textureCube(Skybox, vTexCoord);\n"
" gl_FragDepth = VertexDepth;\n"
"}\n";
const char* fragmentSource140 =
"#version 140\n"
"in vec3 vTexCoord;\n"
"out vec4 RenderTarget0;\n"
"uniform samplerCube Skybox;\n"
"uniform float VertexDepth;\n"
"void main()\n"
"{\n"
" RenderTarget0 = texture(Skybox, vTexCoord);\n"
" gl_FragDepth = VertexDepth;\n"
"}\n";
const char* vertexSource110 =
"#version 110\n"
"attribute vec3 VertexPosition;\n"
"varying vec3 vTexCoord;\n"
"uniform mat4 WorldViewProjMatrix;\n"
"void main()\n"
"{\n"
" gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);\n"
@@ -77,9 +92,13 @@ namespace
const char* vertexSource140 =
"#version 140\n"
"in vec3 VertexPosition;\n"
"out vec3 vTexCoord;\n"
"uniform mat4 WorldViewProjMatrix;\n"
"void main()\n"
"{\n"
" gl_Position = WorldViewProjMatrix * vec4(VertexPosition, 1.0);\n"
@@ -110,15 +129,19 @@ namespace
return nullptr;
}
program->SendInteger(program->GetUniformLocation("Skybox"), 0);
return program.release();
}
NzRenderStates BuildRenderStates()
{
NzRenderStates states;
states.parameters[nzRendererParameter_DepthBuffer] = false;
states.depthFunc = nzRendererComparison_Equal;
states.faceCulling = nzFaceSide_Front;
states.parameters[nzRendererParameter_DepthBuffer] = true;
states.parameters[nzRendererParameter_DepthWrite] = false;
states.parameters[nzRendererParameter_FaceCulling] = true;
states.faceCulling = nzFaceCulling_Front;
return states;
}
@@ -152,7 +175,6 @@ namespace
static NzIndexBuffer* s_indexBuffer = nullptr;
static NzShaderProgram* s_program = nullptr;
static NzVertexBuffer* s_vertexBuffer = nullptr;
static unsigned int s_skyboxLocation;
}
NzSkyboxBackground::NzSkyboxBackground()
@@ -161,10 +183,7 @@ NzSkyboxBackground::NzSkyboxBackground()
s_indexBuffer = BuildIndexBuffer();
if (!s_program)
{
s_program = BuildProgram();
s_skyboxLocation = s_program->GetUniformLocation("Skybox");
}
if (!s_vertexBuffer)
s_vertexBuffer = BuildVertexBuffer();
@@ -197,8 +216,6 @@ void NzSkyboxBackground::Draw(const NzScene* scene) const
{
static NzRenderStates states(BuildRenderStates());
s_program->SendInteger(s_skyboxLocation, 0);
NzAbstractViewer* viewer = scene->GetViewer();
NzMatrix4f skyboxMatrix(viewer->GetViewMatrix());