forked from 0ad/0ad
Removes usages of GetRenderPath to checking for support of shaders.
This was SVN commit r24652.
This commit is contained in:
parent
78d4dd0109
commit
4a69e9117e
@ -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
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user