Removes usages of GetRenderPath to checking for support of shaders.

This was SVN commit r24652.
This commit is contained in:
Vladislav Belov 2021-01-16 23:18:56 +00:00
parent 78d4dd0109
commit 4a69e9117e
6 changed files with 111 additions and 243 deletions

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2020 Wildfire Games.
/* Copyright (C) 2021 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -607,8 +607,7 @@ void CMiniMap::Draw()
if (m_EntitiesDrawn > 0)
{
#if !CONFIG2_GLES
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
glEnable(GL_VERTEX_PROGRAM_POINT_SIZE);
#endif
u8* indexBase = m_IndexArray.Bind();
@ -626,8 +625,7 @@ void CMiniMap::Draw()
CVertexBuffer::Unbind();
#if !CONFIG2_GLES
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
glDisable(GL_VERTEX_PROGRAM_POINT_SIZE);
#endif
}

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2020 Wildfire Games.
/* Copyright (C) 2021 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -40,6 +40,21 @@
#include <unordered_map>
namespace
{
CShaderProgramPtr GetOverlayLineShader(const CShaderDefines& defines)
{
const char* shaderName;
if (g_RenderingOptions.GetPreferGLSL())
shaderName = "glsl/overlayline";
else
shaderName = "arb/overlayline";
return g_Renderer.GetShaderManager().LoadProgram(shaderName, defines);
}
} // anonymous namespace
/**
* Key used to group quads into batches for more efficient rendering. Currently groups by the combination
* of the main texture and the texture mask, to minimize texture swapping during rendering.
@ -427,22 +442,10 @@ void OverlayRenderer::RenderTexturedOverlayLines()
glEnable(GL_BLEND);
glDepthMask(0);
const char* shaderName;
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
{
if (g_RenderingOptions.GetPreferGLSL())
shaderName = "glsl/overlayline";
else
shaderName = "arb/overlayline";
}
else
shaderName = "fixed:overlayline";
CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture();
CShaderManager& shaderManager = g_Renderer.GetShaderManager();
CShaderProgramPtr shaderTexLineNormal(shaderManager.LoadProgram(shaderName, m->defsOverlayLineNormal));
CShaderProgramPtr shaderTexLineAlwaysVisible(shaderManager.LoadProgram(shaderName, m->defsOverlayLineAlwaysVisible));
CShaderProgramPtr shaderTexLineNormal = GetOverlayLineShader(m->defsOverlayLineNormal);
CShaderProgramPtr shaderTexLineAlwaysVisible = GetOverlayLineShader(m->defsOverlayLineAlwaysVisible);
// ----------------------------------------------------------------------------------------
@ -517,19 +520,7 @@ void OverlayRenderer::RenderQuadOverlays()
if (m->quadBatchMap.empty())
return;
const char* shaderName;
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
{
if (g_RenderingOptions.GetPreferGLSL())
shaderName = "glsl/overlayline";
else
shaderName = "arb/overlayline";
}
else
shaderName = "fixed:overlayline";
CShaderManager& shaderManager = g_Renderer.GetShaderManager();
CShaderProgramPtr shader(shaderManager.LoadProgram(shaderName, m->defsQuadOverlay));
CShaderProgramPtr shader = GetOverlayLineShader(m->defsQuadOverlay);
if (!shader)
return;
@ -631,31 +622,19 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
CShaderProgramPtr shader;
CShaderTechniquePtr tech;
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
{
tech = g_Renderer.GetShaderManager().LoadEffect(str_foreground_overlay);
tech->BeginPass();
shader = tech->GetShader();
}
CShaderTechniquePtr tech = g_Renderer.GetShaderManager().LoadEffect(str_foreground_overlay);
tech->BeginPass();
CShaderProgramPtr shader = tech->GetShader();
float uvs[8] = { 0,1, 1,1, 1,0, 0,0 };
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(float)*2, &uvs[0]);
else
glTexCoordPointer(2, GL_FLOAT, sizeof(float)*2, &uvs);
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(float)*2, &uvs[0]);
for (size_t i = 0; i < m->sprites.size(); ++i)
{
SOverlaySprite* sprite = m->sprites[i];
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
shader->BindTexture(str_baseTex, sprite->m_Texture);
else
sprite->m_Texture->Bind();
shader->BindTexture(str_baseTex, sprite->m_Texture);
if (shader)
shader->Uniform(str_colorMul, sprite->m_Color);
@ -667,10 +646,7 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y1
};
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
shader->VertexPointer(3, GL_FLOAT, sizeof(float)*3, &pos[0].X);
else
glVertexPointer(3, GL_FLOAT, sizeof(float)*3, &pos[0].X);
shader->VertexPointer(3, GL_FLOAT, sizeof(float)*3, &pos[0].X);
glDrawArrays(GL_QUADS, 0, (GLsizei)4);
@ -678,8 +654,7 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
g_Renderer.GetStats().m_OverlayTris += 2;
}
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
tech->EndPass();
tech->EndPass();
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
@ -761,9 +736,6 @@ void OverlayRenderer::RenderSphereOverlays()
#if CONFIG2_GLES
#warning TODO: implement OverlayRenderer::RenderSphereOverlays for GLES
#else
if (g_RenderingOptions.GetRenderPath() != RenderPath::SHADER)
return;
if (m->spheres.empty())
return;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2019 Wildfire Games.
/* Copyright (C) 2021 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -86,13 +86,8 @@ void ParticleRenderer::PrepareForRendering(const CShaderDefines& context)
// renderer initialisation is complete, so load it the first time through here
if (!m->shader)
{
// Only construct the shaders when shaders are supported and enabled; otherwise
// RenderParticles will never be called so it's safe to leave the shaders as null
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
{
m->shader = g_Renderer.GetShaderManager().LoadEffect(str_particle, context, CShaderDefines());
m->shaderSolid = g_Renderer.GetShaderManager().LoadEffect(str_particle_solid, context, CShaderDefines());
}
m->shader = g_Renderer.GetShaderManager().LoadEffect(str_particle, context, CShaderDefines());
m->shaderSolid = g_Renderer.GetShaderManager().LoadEffect(str_particle_solid, context, CShaderDefines());
}
++m->frameNumber;

View File

@ -515,10 +515,10 @@ void CRenderer::RecomputeSystemShaderDefines()
{
CShaderDefines defines;
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER && m_Caps.m_ARBProgram)
if (m_Caps.m_ARBProgram)
defines.Add(str_SYS_HAS_ARB, str_1);
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER && m_Caps.m_VertexShader && m_Caps.m_FragmentShader)
if (m_Caps.m_VertexShader && m_Caps.m_FragmentShader)
defines.Add(str_SYS_HAS_GLSL, str_1);
if (g_RenderingOptions.GetPreferGLSL())
@ -554,7 +554,7 @@ void CRenderer::ReloadShaders()
m->Model.VertexRendererShader = ModelVertexRendererPtr(new ShaderModelVertexRenderer());
m->Model.VertexInstancingShader = ModelVertexRendererPtr(new InstancingModelRenderer(false, g_RenderingOptions.GetPreferGLSL()));
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER && g_RenderingOptions.GetGPUSkinning()) // TODO: should check caps and GLSL etc too
if (g_RenderingOptions.GetGPUSkinning()) // TODO: should check caps and GLSL etc too
{
m->Model.VertexGPUSkinningShader = ModelVertexRendererPtr(new InstancingModelRenderer(true, g_RenderingOptions.GetPreferGLSL()));
m->Model.NormalSkinned = ModelRendererPtr(new ShaderModelRenderer(m->Model.VertexGPUSkinningShader));
@ -567,17 +567,8 @@ void CRenderer::ReloadShaders()
m->Model.TranspSkinned = ModelRendererPtr(new ShaderModelRenderer(m->Model.VertexRendererShader));
}
// Use instancing renderers in shader mode
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
{
m->Model.NormalUnskinned = ModelRendererPtr(new ShaderModelRenderer(m->Model.VertexInstancingShader));
m->Model.TranspUnskinned = ModelRendererPtr(new ShaderModelRenderer(m->Model.VertexInstancingShader));
}
else
{
m->Model.NormalUnskinned = m->Model.NormalSkinned;
m->Model.TranspUnskinned = m->Model.TranspSkinned;
}
m->Model.NormalUnskinned = ModelRendererPtr(new ShaderModelRenderer(m->Model.VertexInstancingShader));
m->Model.TranspUnskinned = ModelRendererPtr(new ShaderModelRenderer(m->Model.VertexInstancingShader));
m->ShadersDirty = false;
}
@ -1240,10 +1231,6 @@ void CRenderer::RenderSilhouettes(const CShaderDefines& context)
void CRenderer::RenderParticles(int cullGroup)
{
// Only supported in shader modes
if (g_RenderingOptions.GetRenderPath() != RenderPath::SHADER)
return;
PROFILE3_GPU("particles");
m->particleRenderer.RenderParticles(cullGroup);
@ -1307,7 +1294,7 @@ void CRenderer::RenderSubmissions(const CBoundingBoxAligned& waterScissor)
m->particleRenderer.PrepareForRendering(context);
if (m_Caps.m_Shadows && g_RenderingOptions.GetShadows() && g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
if (m_Caps.m_Shadows && g_RenderingOptions.GetShadows())
{
RenderShadowMap(context);
}
@ -1512,7 +1499,7 @@ void CRenderer::SetSceneCamera(const CCamera& viewCamera, const CCamera& cullCam
m_ViewCamera = viewCamera;
m_CullCamera = cullCamera;
if (m_Caps.m_Shadows && g_RenderingOptions.GetShadows() && g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
if (m_Caps.m_Shadows && g_RenderingOptions.GetShadows())
m->shadow.SetupFrame(m_CullCamera, m_LightEnv->GetSunDir());
}
@ -1658,7 +1645,7 @@ void CRenderer::RenderScene(Scene& scene)
m->silhouetteRenderer.RenderSubmitCasters(*this);
}
if (m_Caps.m_Shadows && g_RenderingOptions.GetShadows() && g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
if (m_Caps.m_Shadows && g_RenderingOptions.GetShadows())
{
m_CurrentCullGroup = CULL_SHADOWS;

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2020 Wildfire Games.
/* Copyright (C) 2021 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -209,166 +209,87 @@ void SkyManager::RenderSky()
const CCamera& camera = g_Renderer.GetViewCamera();
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
{
CShaderTechniquePtr skytech =
g_Renderer.GetShaderManager().LoadEffect(str_sky_simple);
skytech->BeginPass();
CShaderProgramPtr shader = skytech->GetShader();
shader->BindTexture(str_baseTex, m_SkyCubeMap);
CShaderTechniquePtr skytech =
g_Renderer.GetShaderManager().LoadEffect(str_sky_simple);
skytech->BeginPass();
CShaderProgramPtr shader = skytech->GetShader();
shader->BindTexture(str_baseTex, m_SkyCubeMap);
// Translate so the sky center is at the camera space origin.
CMatrix3D translate;
translate.SetTranslation(camera.GetOrientation().GetTranslation());
// Translate so the sky center is at the camera space origin.
CMatrix3D translate;
translate.SetTranslation(camera.GetOrientation().GetTranslation());
// Currently we have a hardcoded near plane in the projection matrix.
CMatrix3D scale;
scale.SetScaling(10.0f, 10.0f, 10.0f);
// Currently we have a hardcoded near plane in the projection matrix.
CMatrix3D scale;
scale.SetScaling(10.0f, 10.0f, 10.0f);
// Rotate so that the "left" face, which contains the brightest part of
// each skymap, is in the direction of the sun from our light
// environment.
CMatrix3D rotate;
rotate.SetYRotation(M_PI + g_Renderer.GetLightEnv().GetRotation());
// Rotate so that the "left" face, which contains the brightest part of
// each skymap, is in the direction of the sun from our light
// environment.
CMatrix3D rotate;
rotate.SetYRotation(M_PI + g_Renderer.GetLightEnv().GetRotation());
shader->Uniform(
str_transform,
camera.GetViewProjection() * translate * rotate * scale);
shader->Uniform(
str_transform,
camera.GetViewProjection() * translate * rotate * scale);
std::vector<GLfloat> vertexData;
// 6 sides of cube with 4 vertices with 6 floats (3 uv and 3 position).
vertexData.reserve(6 * 4 * 6);
#define ADD_VERTEX(U, V, W, X, Y, Z) \
STMT( \
vertexData.push_back(X); \
vertexData.push_back(Y); \
vertexData.push_back(Z); \
vertexData.push_back(U); \
vertexData.push_back(V); \
vertexData.push_back(W);)
std::vector<GLfloat> vertexData;
// 6 sides of cube with 4 vertices with 6 floats (3 uv and 3 position).
vertexData.reserve(6 * 4 * 6);
#define ADD_VERTEX(U, V, W, X, Y, Z) \
STMT( \
vertexData.push_back(X); \
vertexData.push_back(Y); \
vertexData.push_back(Z); \
vertexData.push_back(U); \
vertexData.push_back(V); \
vertexData.push_back(W);)
// GL_TEXTURE_CUBE_MAP_NEGATIVE_X
ADD_VERTEX(+1, +1, +1, -1.0f, -1.0f, -1.0f);
ADD_VERTEX(+1, +1, -1, -1.0f, -1.0f, +1.0f);
ADD_VERTEX(+1, -1, -1, -1.0f, +1.0f, +1.0f);
ADD_VERTEX(+1, -1, +1, -1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_NEGATIVE_X
ADD_VERTEX(+1, +1, +1, -1.0f, -1.0f, -1.0f);
ADD_VERTEX(+1, +1, -1, -1.0f, -1.0f, +1.0f);
ADD_VERTEX(+1, -1, -1, -1.0f, +1.0f, +1.0f);
ADD_VERTEX(+1, -1, +1, -1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_POSITIVE_X
ADD_VERTEX(-1, +1, -1, +1.0f, -1.0f, +1.0f);
ADD_VERTEX(-1, +1, +1, +1.0f, -1.0f, -1.0f);
ADD_VERTEX(-1, -1, +1, +1.0f, +1.0f, -1.0f);
ADD_VERTEX(-1, -1, -1, +1.0f, +1.0f, +1.0f);
// GL_TEXTURE_CUBE_MAP_POSITIVE_X
ADD_VERTEX(-1, +1, -1, +1.0f, -1.0f, +1.0f);
ADD_VERTEX(-1, +1, +1, +1.0f, -1.0f, -1.0f);
ADD_VERTEX(-1, -1, +1, +1.0f, +1.0f, -1.0f);
ADD_VERTEX(-1, -1, -1, +1.0f, +1.0f, +1.0f);
// GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
ADD_VERTEX(-1, +1, +1, +1.0f, -1.0f, -1.0f);
ADD_VERTEX(-1, +1, -1, +1.0f, -1.0f, +1.0f);
ADD_VERTEX(+1, +1, -1, -1.0f, -1.0f, +1.0f);
ADD_VERTEX(+1, +1, +1, -1.0f, -1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
ADD_VERTEX(-1, +1, +1, +1.0f, -1.0f, -1.0f);
ADD_VERTEX(-1, +1, -1, +1.0f, -1.0f, +1.0f);
ADD_VERTEX(+1, +1, -1, -1.0f, -1.0f, +1.0f);
ADD_VERTEX(+1, +1, +1, -1.0f, -1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_POSITIVE_Y
ADD_VERTEX(+1, -1, +1, -1.0f, +1.0f, -1.0f);
ADD_VERTEX(+1, -1, -1, -1.0f, +1.0f, +1.0f);
ADD_VERTEX(-1, -1, -1, +1.0f, +1.0f, +1.0f);
ADD_VERTEX(-1, -1, +1, +1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_POSITIVE_Y
ADD_VERTEX(+1, -1, +1, -1.0f, +1.0f, -1.0f);
ADD_VERTEX(+1, -1, -1, -1.0f, +1.0f, +1.0f);
ADD_VERTEX(-1, -1, -1, +1.0f, +1.0f, +1.0f);
ADD_VERTEX(-1, -1, +1, +1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
ADD_VERTEX(-1, +1, +1, +1.0f, -1.0f, -1.0f);
ADD_VERTEX(+1, +1, +1, -1.0f, -1.0f, -1.0f);
ADD_VERTEX(+1, -1, +1, -1.0f, +1.0f, -1.0f);
ADD_VERTEX(-1, -1, +1, +1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
ADD_VERTEX(-1, +1, +1, +1.0f, -1.0f, -1.0f);
ADD_VERTEX(+1, +1, +1, -1.0f, -1.0f, -1.0f);
ADD_VERTEX(+1, -1, +1, -1.0f, +1.0f, -1.0f);
ADD_VERTEX(-1, -1, +1, +1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_POSITIVE_Z
ADD_VERTEX(+1, +1, -1, -1.0f, -1.0f, +1.0f);
ADD_VERTEX(-1, +1, -1, +1.0f, -1.0f, +1.0f);
ADD_VERTEX(-1, -1, -1, +1.0f, +1.0f, +1.0f);
ADD_VERTEX(+1, -1, -1, -1.0f, +1.0f, +1.0f);
#undef ADD_VERTEX
// GL_TEXTURE_CUBE_MAP_POSITIVE_Z
ADD_VERTEX(+1, +1, -1, -1.0f, -1.0f, +1.0f);
ADD_VERTEX(-1, +1, -1, +1.0f, -1.0f, +1.0f);
ADD_VERTEX(-1, -1, -1, +1.0f, +1.0f, +1.0f);
ADD_VERTEX(+1, -1, -1, -1.0f, +1.0f, +1.0f);
#undef ADD_VERTEX
shader->VertexPointer(3, GL_FLOAT, sizeof(GLfloat) * 6, &vertexData[0]);
shader->TexCoordPointer(
GL_TEXTURE0, 3, GL_FLOAT, sizeof(GLfloat) * 6, &vertexData[3]);
shader->AssertPointersBound();
shader->VertexPointer(3, GL_FLOAT, sizeof(GLfloat) * 6, &vertexData[0]);
shader->TexCoordPointer(
GL_TEXTURE0, 3, GL_FLOAT, sizeof(GLfloat) * 6, &vertexData[3]);
shader->AssertPointersBound();
glDrawArrays(GL_QUADS, 0, 6 * 4);
glDrawArrays(GL_QUADS, 0, 6 * 4);
skytech->EndPass();
}
else
{
pglActiveTextureARB(GL_TEXTURE0_ARB);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glMatrixMode(GL_MODELVIEW);
// Modify current matrix that already contains view part.
glPushMatrix();
// Translate so the sky center is at the camera space origin.
CVector3D cameraPos = camera.GetOrientation().GetTranslation();
glTranslatef(cameraPos.X, cameraPos.Y, cameraPos.Z);
// Rotate so that the "left" face, which contains the brightest part of
// each skymap, is in the direction of the sun from our light
// environment.
glRotatef(
180.0f + RADTODEG(g_Renderer.GetLightEnv().GetRotation()),
0.0f, 1.0f, 0.0f);
// Currently we have a hardcoded near plane in the projection matrix.
glScalef(10.0f, 10.0f, 10.0f);
glDisable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_CUBE_MAP);
glBindTexture(GL_TEXTURE_CUBE_MAP, m_SkyCubeMap);
glBegin(GL_QUADS);
// GL_TEXTURE_CUBE_MAP_NEGATIVE_X
glTexCoord3f(+1, +1, +1); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord3f(+1, +1, -1); glVertex3f(-1.0f, -1.0f, +1.0f);
glTexCoord3f(+1, -1, -1); glVertex3f(-1.0f, +1.0f, +1.0f);
glTexCoord3f(+1, -1, +1); glVertex3f(-1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_POSITIVE_X
glTexCoord3f(-1, +1, -1); glVertex3f(+1.0f, -1.0f, +1.0f);
glTexCoord3f(-1, +1, +1); glVertex3f(+1.0f, -1.0f, -1.0f);
glTexCoord3f(-1, -1, +1); glVertex3f(+1.0f, +1.0f, -1.0f);
glTexCoord3f(-1, -1, -1); glVertex3f(+1.0f, +1.0f, +1.0f);
// GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
glTexCoord3f(-1, +1, +1); glVertex3f(+1.0f, -1.0f, -1.0f);
glTexCoord3f(-1, +1, -1); glVertex3f(+1.0f, -1.0f, +1.0f);
glTexCoord3f(+1, +1, -1); glVertex3f(-1.0f, -1.0f, +1.0f);
glTexCoord3f(+1, +1, +1); glVertex3f(-1.0f, -1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_POSITIVE_Y
glTexCoord3f(+1, -1, +1); glVertex3f(-1.0f, +1.0f, -1.0f);
glTexCoord3f(+1, -1, -1); glVertex3f(-1.0f, +1.0f, +1.0f);
glTexCoord3f(-1, -1, -1); glVertex3f(+1.0f, +1.0f, +1.0f);
glTexCoord3f(-1, -1, +1); glVertex3f(+1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
glTexCoord3f(-1, +1, +1); glVertex3f(+1.0f, -1.0f, -1.0f);
glTexCoord3f(+1, +1, +1); glVertex3f(-1.0f, -1.0f, -1.0f);
glTexCoord3f(+1, -1, +1); glVertex3f(-1.0f, +1.0f, -1.0f);
glTexCoord3f(-1, -1, +1); glVertex3f(+1.0f, +1.0f, -1.0f);
// GL_TEXTURE_CUBE_MAP_POSITIVE_Z
glTexCoord3f(+1, +1, -1); glVertex3f(-1.0f, -1.0f, +1.0f);
glTexCoord3f(-1, +1, -1); glVertex3f(+1.0f, -1.0f, +1.0f);
glTexCoord3f(-1, -1, -1); glVertex3f(+1.0f, +1.0f, +1.0f);
glTexCoord3f(+1, -1, -1); glVertex3f(-1.0f, +1.0f, +1.0f);
glEnd();
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
glDisable(GL_TEXTURE_CUBE_MAP);
glEnable(GL_TEXTURE_2D);
glPopMatrix();
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
}
skytech->EndPass();
glDepthMask(GL_TRUE);

View File

@ -65,15 +65,10 @@ namespace
CShaderProgramPtr GetDummyShader()
{
const char* shaderName;
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
{
if (g_RenderingOptions.GetPreferGLSL())
shaderName = "glsl/dummy";
else
shaderName = "arb/dummy";
}
if (g_RenderingOptions.GetPreferGLSL())
shaderName = "glsl/dummy";
else
shaderName = "fixed:dummy";
shaderName = "arb/dummy";
return g_Renderer.GetShaderManager().LoadProgram(shaderName, CShaderDefines());
}