- Fixed issue with texture matrices and built-in OpenGL ES2 materials.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@4958 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
parent
d448851f71
commit
f9806e994c
@ -95,7 +95,7 @@ void main()
|
||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||
gl_PointSize = uThickness;
|
||||
|
||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 0.0, 0.0);
|
||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 0.0, 1.0);
|
||||
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
|
||||
|
||||
vec3 Position = (uWVMatrix * vec4(inVertexPosition, 1.0)).xyz;
|
||||
|
@ -93,7 +93,7 @@ void main()
|
||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||
gl_PointSize = uThickness;
|
||||
|
||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 0.0, 0.0);
|
||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 0.0, 1.0);
|
||||
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
|
||||
|
||||
vVertexColor = inVertexColor.bgra;
|
||||
|
@ -96,10 +96,10 @@ void main()
|
||||
gl_Position = uWVPMatrix * vec4(inVertexPosition, 1.0);
|
||||
gl_PointSize = uThickness;
|
||||
|
||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 0.0, 0.0);
|
||||
vec4 TextureCoord0 = vec4(inTexCoord0.x, inTexCoord0.y, 0.0, 1.0);
|
||||
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
|
||||
|
||||
vec4 TextureCoord1 = vec4(inTexCoord1.x, inTexCoord1.y, 0.0, 0.0);
|
||||
vec4 TextureCoord1 = vec4(inTexCoord1.x, inTexCoord1.y, 0.0, 1.0);
|
||||
vTextureCoord1 = vec4(uTMatrix1 * TextureCoord1).xy;
|
||||
|
||||
vVertexColor = inVertexColor.bgra;
|
||||
|
@ -1636,7 +1636,10 @@ bool COGLES2Driver::endScene()
|
||||
OverrideMaterial.apply(Material);
|
||||
|
||||
for (u32 i = 0; i < MaxTextureUnits; ++i)
|
||||
{
|
||||
setActiveTexture(i, material.getTexture(i));
|
||||
setTransform((E_TRANSFORMATION_STATE)(ETS_TEXTURE_0 + i), material.getTextureMatrix(i));
|
||||
}
|
||||
}
|
||||
|
||||
//! prints error if an error happened.
|
||||
@ -1912,9 +1915,9 @@ bool COGLES2Driver::endScene()
|
||||
const COGLES2Texture* tmpTexture = static_cast<const COGLES2Texture*>(CurrentTexture[i]);
|
||||
GLenum tmpTextureType = (tmpTexture) ? tmpTexture->getOpenGLTextureType() : GL_TEXTURE_2D;
|
||||
|
||||
if (CurrentTexture[i])
|
||||
BridgeCalls->setTexture(i, tmpTextureType);
|
||||
else
|
||||
BridgeCalls->setTexture(i, tmpTextureType);
|
||||
|
||||
if (!CurrentTexture[i])
|
||||
continue;
|
||||
|
||||
if (resetAllRenderstates)
|
||||
@ -2959,11 +2962,16 @@ bool COGLES2Driver::endScene()
|
||||
setActiveTexture(GL_TEXTURE0 + stage);
|
||||
|
||||
if (Driver->CurrentTexture[stage])
|
||||
{
|
||||
glBindTexture(type, static_cast<const COGLES2Texture*>(Driver->CurrentTexture[stage])->getOpenGLTextureName());
|
||||
else
|
||||
glBindTexture(type, 0);
|
||||
|
||||
TextureType[stage] = type;
|
||||
TextureType[stage] = type;
|
||||
}
|
||||
else
|
||||
{
|
||||
glBindTexture(TextureType[stage], 0);
|
||||
}
|
||||
|
||||
Texture[stage] = Driver->CurrentTexture[stage];
|
||||
}
|
||||
}
|
||||
|
@ -2208,7 +2208,10 @@ void COpenGLDriver::setMaterial(const SMaterial& material)
|
||||
OverrideMaterial.apply(Material);
|
||||
|
||||
for (u32 i = 0; i < MaxTextureUnits; ++i)
|
||||
{
|
||||
setActiveTexture(i, material.getTexture(i));
|
||||
setTransform((E_TRANSFORMATION_STATE)(ETS_TEXTURE_0 + i), material.getTextureMatrix(i));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2869,34 +2872,21 @@ void COpenGLDriver::setTextureRenderStates(const SMaterial& material, bool reset
|
||||
const COpenGLTexture* tmpTexture = static_cast<const COpenGLTexture*>(CurrentTexture[i]);
|
||||
GLenum tmpTextureType = (tmpTexture) ? tmpTexture->getOpenGLTextureType() : GL_TEXTURE_2D;
|
||||
|
||||
bool fixedPipeline = false;
|
||||
|
||||
if(FixedPipelineState == EOFPS_ENABLE || FixedPipelineState == EOFPS_DISABLE_TO_ENABLE)
|
||||
{
|
||||
if (i>0 && !MultiTextureExtension)
|
||||
break;
|
||||
|
||||
if (!CurrentTexture[i])
|
||||
{
|
||||
BridgeCalls->setTexture(i, tmpTextureType, true);
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
BridgeCalls->setTexture(i, tmpTextureType, true);
|
||||
|
||||
setTransform ((E_TRANSFORMATION_STATE) (ETS_TEXTURE_0 + i), material.getTextureMatrix(i));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (CurrentTexture[i])
|
||||
{
|
||||
BridgeCalls->setTexture(i, tmpTextureType, false);
|
||||
}
|
||||
else
|
||||
continue;
|
||||
fixedPipeline = true;
|
||||
}
|
||||
|
||||
BridgeCalls->setTexture(i, tmpTextureType, fixedPipeline);
|
||||
|
||||
if (!CurrentTexture[i])
|
||||
continue;
|
||||
|
||||
if(resetAllRenderstates)
|
||||
tmpTexture->getStatesCache().IsCached = false;
|
||||
|
||||
@ -5017,7 +5007,7 @@ void COpenGLCallBridge::setTexture(GLuint stage, GLenum type, bool fixedPipeline
|
||||
{
|
||||
setActiveTexture(GL_TEXTURE0_ARB + stage);
|
||||
|
||||
if(Driver->CurrentTexture[stage])
|
||||
if (Driver->CurrentTexture[stage])
|
||||
{
|
||||
if(fixedPipeline)
|
||||
{
|
||||
@ -5026,17 +5016,18 @@ void COpenGLCallBridge::setTexture(GLuint stage, GLenum type, bool fixedPipeline
|
||||
}
|
||||
|
||||
glBindTexture(type, static_cast<const COpenGLTexture*>(Driver->CurrentTexture[stage])->getOpenGLTextureName());
|
||||
|
||||
TextureType[stage] = type;
|
||||
}
|
||||
else
|
||||
{
|
||||
glBindTexture(type, 0);
|
||||
glBindTexture(TextureType[stage], 0);
|
||||
|
||||
if(fixedPipeline)
|
||||
if (fixedPipeline)
|
||||
glDisable(TextureType[stage]);
|
||||
}
|
||||
|
||||
TextureFixedPipeline[stage] = fixedPipeline;
|
||||
TextureType[stage] = type;
|
||||
Texture[stage] = Driver->CurrentTexture[stage];
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user