Yet more GLES compatibility
This was SVN commit r11061.
This commit is contained in:
parent
a9eca31bad
commit
677ccf53e6
@ -1,7 +1,12 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<program type="arb">
|
<program type="arb">
|
||||||
|
|
||||||
<vertex file="particle.vp"/>
|
<vertex file="particle.vp">
|
||||||
|
<stream name="pos"/>
|
||||||
|
<stream name="color"/>
|
||||||
|
<stream name="uv0"/>
|
||||||
|
<stream name="uv1"/>
|
||||||
|
</vertex>
|
||||||
|
|
||||||
<fragment file="particle.fp">
|
<fragment file="particle.fp">
|
||||||
<uniform name="baseTex" loc="0" type="sampler2D"/>
|
<uniform name="baseTex" loc="0" type="sampler2D"/>
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<program type="arb">
|
<program type="arb">
|
||||||
|
|
||||||
<vertex file="particle.vp"/>
|
<vertex file="particle.vp">
|
||||||
|
<stream name="pos"/>
|
||||||
|
<stream name="uv0"/>
|
||||||
|
<stream name="uv1"/>
|
||||||
|
</vertex>
|
||||||
|
|
||||||
<fragment file="solid.fp"/>
|
<fragment file="solid.fp"/>
|
||||||
|
|
||||||
|
@ -153,7 +153,7 @@ void CParticleEmitter::Bind()
|
|||||||
glBlendFunc(m_Type->m_BlendFuncSrc, m_Type->m_BlendFuncDst);
|
glBlendFunc(m_Type->m_BlendFuncSrc, m_Type->m_BlendFuncDst);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CParticleEmitter::RenderArray()
|
void CParticleEmitter::RenderArray(CShaderProgramPtr& shader)
|
||||||
{
|
{
|
||||||
// Some drivers apparently don't like count=0 in glDrawArrays here,
|
// Some drivers apparently don't like count=0 in glDrawArrays here,
|
||||||
// so skip all drawing in that case
|
// so skip all drawing in that case
|
||||||
@ -164,19 +164,21 @@ void CParticleEmitter::RenderArray()
|
|||||||
|
|
||||||
GLsizei stride = (GLsizei)m_VertexArray.GetStride();
|
GLsizei stride = (GLsizei)m_VertexArray.GetStride();
|
||||||
|
|
||||||
glVertexPointer(3, GL_FLOAT, stride, base + m_AttributePos.offset);
|
shader->VertexPointer(3, GL_FLOAT, stride, base + m_AttributePos.offset);
|
||||||
|
|
||||||
// Pass the sin/cos axis components as texcoords for no particular reason
|
// Pass the sin/cos axis components as texcoords for no particular reason
|
||||||
// other than that they fit. (Maybe this should be glVertexAttrib* instead?)
|
// other than that they fit. (Maybe this should be glVertexAttrib* instead?)
|
||||||
pglClientActiveTextureARB(GL_TEXTURE1);
|
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, stride, base + m_AttributeUV.offset);
|
||||||
glTexCoordPointer(2, GL_FLOAT, stride, base + m_AttributeAxis.offset);
|
shader->TexCoordPointer(GL_TEXTURE1, 2, GL_FLOAT, stride, base + m_AttributeAxis.offset);
|
||||||
|
|
||||||
pglClientActiveTextureARB(GL_TEXTURE0);
|
shader->ColorPointer(4, GL_UNSIGNED_BYTE, stride, base + m_AttributeColor.offset);
|
||||||
glTexCoordPointer(2, GL_FLOAT, stride, base + m_AttributeUV.offset);
|
|
||||||
|
|
||||||
glColorPointer(4, GL_UNSIGNED_BYTE, stride, base + m_AttributeColor.offset);
|
|
||||||
|
|
||||||
|
shader->AssertPointersBound();
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
#warning TODO: change CParticleEmitter to use (indexed?) triangles instead of quads, for GLES
|
||||||
|
#else
|
||||||
glDrawArrays(GL_QUADS, 0, m_Particles.size()*4);
|
glDrawArrays(GL_QUADS, 0, m_Particles.size()*4);
|
||||||
|
#endif
|
||||||
|
|
||||||
g_Renderer.GetStats().m_DrawCalls++;
|
g_Renderer.GetStats().m_DrawCalls++;
|
||||||
g_Renderer.GetStats().m_Particles += m_Particles.size();
|
g_Renderer.GetStats().m_Particles += m_Particles.size();
|
||||||
|
@ -103,7 +103,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Draw the vertex array.
|
* Draw the vertex array.
|
||||||
*/
|
*/
|
||||||
void RenderArray();
|
void RenderArray(CShaderProgramPtr& shader);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop this emitter emitting new particles, and pass responsibility for rendering
|
* Stop this emitter emitting new particles, and pass responsibility for rendering
|
||||||
|
@ -687,7 +687,30 @@ CStr CShaderProgram::Preprocess(CPreprocessor& preprocessor, const CStr& input)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !CONFIG2_GLES
|
#if CONFIG2_GLES
|
||||||
|
|
||||||
|
// These should all be overridden by CShaderProgramGLSL
|
||||||
|
void CShaderProgram::VertexPointer(GLint UNUSED(size), GLenum UNUSED(type), GLsizei UNUSED(stride), void* UNUSED(pointer))
|
||||||
|
{
|
||||||
|
debug_warn("CShaderProgram::VertexPointer should be overridden");
|
||||||
|
}
|
||||||
|
void CShaderProgram::NormalPointer(GLenum UNUSED(type), GLsizei UNUSED(stride), void* UNUSED(pointer))
|
||||||
|
{
|
||||||
|
debug_warn("CShaderProgram::NormalPointer should be overridden");
|
||||||
|
}
|
||||||
|
void CShaderProgram::ColorPointer(GLint UNUSED(size), GLenum UNUSED(type), GLsizei UNUSED(stride), void* UNUSED(pointer))
|
||||||
|
{
|
||||||
|
debug_warn("CShaderProgram::ColorPointer should be overridden");
|
||||||
|
}
|
||||||
|
void CShaderProgram::TexCoordPointer(GLenum UNUSED(texture), GLint UNUSED(size), GLenum UNUSED(type), GLsizei UNUSED(stride), void* UNUSED(pointer))
|
||||||
|
{
|
||||||
|
debug_warn("CShaderProgram::TexCoordPointer should be overridden");
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// These are overridden by CShaderProgramGLSL, but fixed-function and ARB shaders
|
||||||
|
// both use the fixed-function vertex attribute pointers:
|
||||||
|
|
||||||
void CShaderProgram::VertexPointer(GLint size, GLenum type, GLsizei stride, void* pointer)
|
void CShaderProgram::VertexPointer(GLint size, GLenum type, GLsizei stride, void* pointer)
|
||||||
{
|
{
|
||||||
|
@ -106,6 +106,17 @@ actually supported).
|
|||||||
#define pglDeleteBuffersARB glDeleteBuffers
|
#define pglDeleteBuffersARB glDeleteBuffers
|
||||||
#define pglGenBuffersARB glGenBuffers
|
#define pglGenBuffersARB glGenBuffers
|
||||||
|
|
||||||
|
#define pglBindFramebufferEXT glBindFramebuffer
|
||||||
|
#define pglCheckFramebufferStatusEXT glCheckFramebufferStatus
|
||||||
|
#define pglDeleteFramebuffersEXT glDeleteFramebuffers
|
||||||
|
#define pglFramebufferTexture2DEXT glFramebufferTexture2D
|
||||||
|
#define pglGenFramebuffersEXT glGenFramebuffers
|
||||||
|
|
||||||
|
#define GL_DEPTH_ATTACHMENT_EXT GL_DEPTH_ATTACHMENT
|
||||||
|
#define GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0
|
||||||
|
#define GL_FRAMEBUFFER_COMPLETE_EXT GL_FRAMEBUFFER_COMPLETE
|
||||||
|
#define GL_FRAMEBUFFER_EXT GL_FRAMEBUFFER
|
||||||
|
|
||||||
#define GL_CLAMP_TO_BORDER GL_CLAMP_TO_EDGE // TODO: should fix code that relies on GL_CLAMP_TO_BORDER
|
#define GL_CLAMP_TO_BORDER GL_CLAMP_TO_EDGE // TODO: should fix code that relies on GL_CLAMP_TO_BORDER
|
||||||
|
|
||||||
typedef GLuint GLhandleARB;
|
typedef GLuint GLhandleARB;
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#include "renderer/RenderModifiers.h"
|
#include "renderer/RenderModifiers.h"
|
||||||
#include "renderer/VertexArray.h"
|
#include "renderer/VertexArray.h"
|
||||||
|
|
||||||
|
#if !CONFIG2_GLES
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// FixedFunctionModelRenderer implementation
|
// FixedFunctionModelRenderer implementation
|
||||||
@ -283,3 +284,5 @@ void FixedFunctionModelRenderer::RenderModel(CShaderProgramPtr& UNUSED(shader),
|
|||||||
g_Renderer.m_Stats.m_DrawCalls++;
|
g_Renderer.m_Stats.m_DrawCalls++;
|
||||||
g_Renderer.m_Stats.m_ModelTris += numFaces;
|
g_Renderer.m_Stats.m_ModelTris += numFaces;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // !CONFIG2_GLES
|
||||||
|
@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
#include "renderer/ModelVertexRenderer.h"
|
#include "renderer/ModelVertexRenderer.h"
|
||||||
|
|
||||||
|
#if !CONFIG2_GLES
|
||||||
|
|
||||||
struct FixedFunctionModelRendererInternals;
|
struct FixedFunctionModelRendererInternals;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,5 +53,6 @@ private:
|
|||||||
FixedFunctionModelRendererInternals* m;
|
FixedFunctionModelRendererInternals* m;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif // !CONFIG2_GLES
|
||||||
|
|
||||||
#endif // INCLUDED_FIXEDFUNCTIONMODELRENDERER
|
#endif // INCLUDED_FIXEDFUNCTIONMODELRENDERER
|
||||||
|
@ -177,29 +177,11 @@ void ShaderModelRenderer::DestroyModelData(CModel* UNUSED(model), void* data)
|
|||||||
void ShaderModelRenderer::BeginPass(int streamflags)
|
void ShaderModelRenderer::BeginPass(int streamflags)
|
||||||
{
|
{
|
||||||
ENSURE(streamflags == (streamflags & (STREAM_POS|STREAM_NORMAL|STREAM_UV0)));
|
ENSURE(streamflags == (streamflags & (STREAM_POS|STREAM_NORMAL|STREAM_UV0)));
|
||||||
|
|
||||||
if (streamflags & STREAM_POS)
|
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
|
||||||
|
|
||||||
if (streamflags & STREAM_NORMAL)
|
|
||||||
glEnableClientState(GL_NORMAL_ARRAY);
|
|
||||||
|
|
||||||
if (streamflags & STREAM_UV0)
|
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cleanup one rendering pass
|
// Cleanup one rendering pass
|
||||||
void ShaderModelRenderer::EndPass(int streamflags)
|
void ShaderModelRenderer::EndPass(int streamflags)
|
||||||
{
|
{
|
||||||
if (streamflags & STREAM_POS)
|
|
||||||
glDisableClientState(GL_VERTEX_ARRAY);
|
|
||||||
|
|
||||||
if (streamflags & STREAM_NORMAL)
|
|
||||||
glDisableClientState(GL_NORMAL_ARRAY);
|
|
||||||
|
|
||||||
if (streamflags & STREAM_UV0)
|
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
|
|
||||||
CVertexBuffer::Unbind();
|
CVertexBuffer::Unbind();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,8 +227,13 @@ void ShaderModelRenderer::RenderModel(CShaderProgramPtr& shader, int streamflags
|
|||||||
|
|
||||||
if (!g_Renderer.m_SkipSubmit)
|
if (!g_Renderer.m_SkipSubmit)
|
||||||
{
|
{
|
||||||
|
// Draw with DrawRangeElements where available, since it might be more efficient
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
glDrawElements(GL_TRIANGLES, (GLsizei)numFaces*3, GL_UNSIGNED_SHORT, indexBase);
|
||||||
|
#else
|
||||||
pglDrawRangeElementsEXT(GL_TRIANGLES, 0, (GLuint)mdldef->GetNumVertices()-1,
|
pglDrawRangeElementsEXT(GL_TRIANGLES, 0, (GLuint)mdldef->GetNumVertices()-1,
|
||||||
(GLsizei)numFaces*3, GL_UNSIGNED_SHORT, indexBase);
|
(GLsizei)numFaces*3, GL_UNSIGNED_SHORT, indexBase);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// bump stats
|
// bump stats
|
||||||
|
@ -198,8 +198,13 @@ void InstancingModelRenderer::RenderModel(CShaderProgramPtr& UNUSED(shader), int
|
|||||||
|
|
||||||
if (!g_Renderer.m_SkipSubmit)
|
if (!g_Renderer.m_SkipSubmit)
|
||||||
{
|
{
|
||||||
|
// Draw with DrawRangeElements where available, since it might be more efficient
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
glDrawElements(GL_TRIANGLES, (GLsizei)numFaces*3, GL_UNSIGNED_SHORT, m->imodeldefIndexBase);
|
||||||
|
#else
|
||||||
pglDrawRangeElementsEXT(GL_TRIANGLES, 0, (GLuint)mdldef->GetNumVertices()-1,
|
pglDrawRangeElementsEXT(GL_TRIANGLES, 0, (GLuint)mdldef->GetNumVertices()-1,
|
||||||
(GLsizei)numFaces*3, GL_UNSIGNED_SHORT, m->imodeldefIndexBase);
|
(GLsizei)numFaces*3, GL_UNSIGNED_SHORT, m->imodeldefIndexBase);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// bump stats
|
// bump stats
|
||||||
|
@ -163,6 +163,9 @@ void OverlayRenderer::RenderOverlaysBeforeWater()
|
|||||||
{
|
{
|
||||||
PROFILE3_GPU("overlays (before)");
|
PROFILE3_GPU("overlays (before)");
|
||||||
|
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
#warning TODO: implement OverlayRenderer::RenderOverlaysBeforeWater for GLES
|
||||||
|
#else
|
||||||
pglActiveTextureARB(GL_TEXTURE0);
|
pglActiveTextureARB(GL_TEXTURE0);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
@ -186,6 +189,7 @@ void OverlayRenderer::RenderOverlaysBeforeWater()
|
|||||||
|
|
||||||
glLineWidth(1.f);
|
glLineWidth(1.f);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlayRenderer::RenderOverlaysAfterWater()
|
void OverlayRenderer::RenderOverlaysAfterWater()
|
||||||
@ -242,11 +246,6 @@ void OverlayRenderer::RenderOverlaysAfterWater()
|
|||||||
g_Renderer.BindTexture(0, 0);
|
g_Renderer.BindTexture(0, 0);
|
||||||
|
|
||||||
CVertexBuffer::Unbind();
|
CVertexBuffer::Unbind();
|
||||||
glDisableClientState(GL_VERTEX_ARRAY);
|
|
||||||
pglClientActiveTextureARB(GL_TEXTURE1);
|
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
pglClientActiveTextureARB(GL_TEXTURE0);
|
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
|
|
||||||
glDepthMask(1);
|
glDepthMask(1);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
@ -300,6 +299,9 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
|
|||||||
{
|
{
|
||||||
PROFILE3_GPU("overlays (fg)");
|
PROFILE3_GPU("overlays (fg)");
|
||||||
|
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
#warning TODO: implement OverlayRenderer::RenderForegroundOverlays for GLES
|
||||||
|
#else
|
||||||
glEnable(GL_TEXTURE_2D);
|
glEnable(GL_TEXTURE_2D);
|
||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glDisable(GL_DEPTH_TEST);
|
glDisable(GL_DEPTH_TEST);
|
||||||
@ -338,6 +340,7 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
|
|||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glDisable(GL_TEXTURE_2D);
|
glDisable(GL_TEXTURE_2D);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void CTexturedLineRData::Update()
|
void CTexturedLineRData::Update()
|
||||||
|
@ -121,21 +121,12 @@ void ParticleRenderer::RenderParticles(bool solidColor)
|
|||||||
glEnable(GL_BLEND);
|
glEnable(GL_BLEND);
|
||||||
glDepthMask(0);
|
glDepthMask(0);
|
||||||
|
|
||||||
glEnableClientState(GL_VERTEX_ARRAY);
|
|
||||||
if (!solidColor)
|
|
||||||
glEnableClientState(GL_COLOR_ARRAY);
|
|
||||||
|
|
||||||
pglClientActiveTextureARB(GL_TEXTURE1);
|
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
pglClientActiveTextureARB(GL_TEXTURE0);
|
|
||||||
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < m->emitters.size(); ++i)
|
for (size_t i = 0; i < m->emitters.size(); ++i)
|
||||||
{
|
{
|
||||||
CParticleEmitter* emitter = m->emitters[i];
|
CParticleEmitter* emitter = m->emitters[i];
|
||||||
|
|
||||||
emitter->Bind();
|
emitter->Bind();
|
||||||
emitter->RenderArray();
|
emitter->RenderArray(shader);
|
||||||
}
|
}
|
||||||
|
|
||||||
CVertexBuffer::Unbind();
|
CVertexBuffer::Unbind();
|
||||||
@ -143,14 +134,6 @@ void ParticleRenderer::RenderParticles(bool solidColor)
|
|||||||
pglBlendEquationEXT(GL_FUNC_ADD);
|
pglBlendEquationEXT(GL_FUNC_ADD);
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
glDisableClientState(GL_VERTEX_ARRAY);
|
|
||||||
glDisableClientState(GL_COLOR_ARRAY);
|
|
||||||
|
|
||||||
pglClientActiveTextureARB(GL_TEXTURE1);
|
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
pglClientActiveTextureARB(GL_TEXTURE0);
|
|
||||||
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
|
|
||||||
|
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glDepthMask(1);
|
glDepthMask(1);
|
||||||
|
|
||||||
|
@ -375,7 +375,7 @@ public:
|
|||||||
const CMatrix3D& proj = camera.GetProjection();
|
const CMatrix3D& proj = camera.GetProjection();
|
||||||
|
|
||||||
#if CONFIG2_GLES
|
#if CONFIG2_GLES
|
||||||
#warning TODO: fix CRenderer camera handling for GLES (don't use global matrixes)
|
#warning TODO: fix CRenderer camera handling for GLES (do not use global matrixes)
|
||||||
#else
|
#else
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glLoadMatrixf(&proj._11);
|
glLoadMatrixf(&proj._11);
|
||||||
|
@ -351,7 +351,7 @@ void ShadowMapInternals::CreateTexture()
|
|||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
glGenTextures(1, &Texture);
|
glGenTextures(1, &Texture);
|
||||||
@ -362,22 +362,28 @@ void ShadowMapInternals::CreateTexture()
|
|||||||
switch(DepthTextureBits)
|
switch(DepthTextureBits)
|
||||||
{
|
{
|
||||||
case 16: format = GL_DEPTH_COMPONENT16; break;
|
case 16: format = GL_DEPTH_COMPONENT16; break;
|
||||||
|
#if !CONFIG2_GLES
|
||||||
case 24: format = GL_DEPTH_COMPONENT24; break;
|
case 24: format = GL_DEPTH_COMPONENT24; break;
|
||||||
case 32: format = GL_DEPTH_COMPONENT32; break;
|
case 32: format = GL_DEPTH_COMPONENT32; break;
|
||||||
|
#endif
|
||||||
default: format = GL_DEPTH_COMPONENT; break;
|
default: format = GL_DEPTH_COMPONENT; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, format, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
|
glTexImage2D(GL_TEXTURE_2D, 0, format, Width, Height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
|
||||||
|
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
#warning TODO: implement shadows with non-depth textures and explicit comparisons in the GLSL
|
||||||
|
#else
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
|
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
|
||||||
|
#endif
|
||||||
|
|
||||||
// set texture parameters
|
// set texture parameters
|
||||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
// bind to framebuffer object
|
// bind to framebuffer object
|
||||||
glBindTexture(GL_TEXTURE_2D, 0);
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
@ -391,10 +397,16 @@ void ShadowMapInternals::CreateTexture()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
#warning TODO: figure out whether the glDrawBuffer/glReadBuffer stuff is needed, since it is not supported by GLES
|
||||||
|
#else
|
||||||
glDrawBuffer(GL_NONE);
|
glDrawBuffer(GL_NONE);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !CONFIG2_GLES
|
||||||
glReadBuffer(GL_NONE);
|
glReadBuffer(GL_NONE);
|
||||||
|
#endif
|
||||||
|
|
||||||
GLenum status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
|
GLenum status = pglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
|
||||||
|
|
||||||
@ -447,6 +459,9 @@ void ShadowMap::BeginRender()
|
|||||||
// setup viewport
|
// setup viewport
|
||||||
glViewport(0, 0, m->EffectiveWidth, m->EffectiveHeight);
|
glViewport(0, 0, m->EffectiveWidth, m->EffectiveHeight);
|
||||||
|
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
#warning TODO: implement ShdaowMap::BeginRender GLES
|
||||||
|
#else
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadMatrixf(&m->LightProjection._11);
|
glLoadMatrixf(&m->LightProjection._11);
|
||||||
@ -454,6 +469,7 @@ void ShadowMap::BeginRender()
|
|||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadMatrixf(&m->LightTransform._11);
|
glLoadMatrixf(&m->LightTransform._11);
|
||||||
|
#endif
|
||||||
|
|
||||||
glEnable(GL_SCISSOR_TEST);
|
glEnable(GL_SCISSOR_TEST);
|
||||||
glScissor(1,1, m->EffectiveWidth-2, m->EffectiveHeight-2);
|
glScissor(1,1, m->EffectiveWidth-2, m->EffectiveHeight-2);
|
||||||
@ -475,11 +491,13 @@ void ShadowMap::EndRender()
|
|||||||
|
|
||||||
glColorMask(1,1,1,1);
|
glColorMask(1,1,1,1);
|
||||||
|
|
||||||
|
#if !CONFIG2_GLES
|
||||||
// restore matrix stack
|
// restore matrix stack
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -600,6 +618,9 @@ void ShadowMap::RenderDebugDisplay()
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Render the shadow map
|
// Render the shadow map
|
||||||
|
#if CONFIG2_GLES
|
||||||
|
#warning TODO: implement ShadowMap::RenderDebugDisplay for GLES
|
||||||
|
#else
|
||||||
glMatrixMode(GL_PROJECTION);
|
glMatrixMode(GL_PROJECTION);
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glLoadIdentity();
|
glLoadIdentity();
|
||||||
@ -626,6 +647,7 @@ void ShadowMap::RenderDebugDisplay()
|
|||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
|
#endif
|
||||||
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDepthMask(1);
|
glDepthMask(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user