- 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:
nadro 2014-10-02 18:22:36 +00:00
parent d448851f71
commit f9806e994c
5 changed files with 34 additions and 35 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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];
}
}

View File

@ -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];
}
}