Add support for SMaterial::EmissiveColor to fixed pipeline simulation with es2 shaders.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@4944 dfc29bdd-3216-0410-991c-e03cc46cb475
master
cutealien 2014-09-26 00:36:19 +00:00
parent b5ac7335b8
commit 25991b1d87
6 changed files with 21 additions and 4 deletions

View File

@ -18,6 +18,7 @@ uniform mat4 uTMatrix0;
uniform vec4 uGlobalAmbient;
uniform vec4 uMaterialAmbient;
uniform vec4 uMaterialDiffuse;
uniform vec4 uMaterialEmissive;
uniform vec4 uMaterialSpecular;
uniform float uMaterialShininess;
@ -138,6 +139,8 @@ void main()
LightColor.w = 1.0;
vVertexColor *= LightColor;
vVertexColor += uMaterialEmissive;
vVertexColor = clamp(vVertexColor, 0.0, 1.0);
}
vFogCoord = length(Position);

View File

@ -18,6 +18,7 @@ uniform mat4 uTMatrix0;
uniform vec4 uGlobalAmbient;
uniform vec4 uMaterialAmbient;
uniform vec4 uMaterialDiffuse;
uniform vec4 uMaterialEmissive;
uniform vec4 uMaterialSpecular;
uniform float uMaterialShininess;
@ -92,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);
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
@ -131,6 +132,8 @@ void main()
LightColor.w = 1.0;
vVertexColor *= LightColor;
vVertexColor += uMaterialEmissive;
vVertexColor = clamp(vVertexColor, 0.0, 1.0);
}
vFogCoord = length(Position);

View File

@ -19,6 +19,7 @@ uniform mat4 uTMatrix1;
uniform vec4 uGlobalAmbient;
uniform vec4 uMaterialAmbient;
uniform vec4 uMaterialDiffuse;
uniform vec4 uMaterialEmissive;
uniform vec4 uMaterialSpecular;
uniform float uMaterialShininess;
@ -94,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);
vTextureCoord0 = vec4(uTMatrix0 * TextureCoord0).xy;
@ -136,6 +137,8 @@ void main()
LightColor.w = 1.0;
vVertexColor *= LightColor;
vVertexColor += uMaterialEmissive;
vVertexColor = clamp(vVertexColor, 0.0, 1.0);
}
vFogCoord = length(Position);

View File

@ -17,6 +17,7 @@ uniform mat4 uNMatrix;
uniform vec4 uGlobalAmbient;
uniform vec4 uMaterialAmbient;
uniform vec4 uMaterialDiffuse;
uniform vec4 uMaterialEmissive;
uniform vec4 uMaterialSpecular;
uniform float uMaterialShininess;
@ -133,6 +134,8 @@ void main()
LightColor.w = 1.0;
vVertexColor *= LightColor;
vVertexColor += uMaterialEmissive;
vVertexColor = clamp(vVertexColor, 0.0, 1.0);
}
vFogCoord = length(Position);

View File

@ -18,9 +18,9 @@ namespace video
// Base callback
COGLES2MaterialBaseCB::COGLES2MaterialBaseCB() :
FirstUpdateBase(true), WVPMatrixID(-1), WVMatrixID(-1), NMatrixID(-1), GlobalAmbientID(-1), MaterialAmbientID(-1), MaterialDiffuseID(-1), MaterialSpecularID(-1), MaterialShininessID(-1), LightCountID(-1), LightTypeID(-1),
FirstUpdateBase(true), WVPMatrixID(-1), WVMatrixID(-1), NMatrixID(-1), GlobalAmbientID(-1), MaterialAmbientID(-1), MaterialDiffuseID(-1), MaterialEmissiveID(-1), MaterialSpecularID(-1), MaterialShininessID(-1), LightCountID(-1), LightTypeID(-1),
LightPositionID(-1), LightDirectionID(-1), LightAttenuationID(-1), LightAmbientID(-1), LightDiffuseID(-1), LightSpecularID(-1), FogEnableID(-1), FogTypeID(-1), FogColorID(-1), FogStartID(-1),
FogEndID(-1), FogDensityID(-1), ThicknessID(-1), LightEnable(false), MaterialAmbient(SColorf(0.f, 0.f, 0.f)), MaterialDiffuse(SColorf(0.f, 0.f, 0.f)), MaterialSpecular(SColorf(0.f, 0.f, 0.f)),
FogEndID(-1), FogDensityID(-1), ThicknessID(-1), LightEnable(false), MaterialAmbient(SColorf(0.f, 0.f, 0.f)), MaterialDiffuse(SColorf(0.f, 0.f, 0.f)), MaterialEmissive(SColorf(0.f, 0.f, 0.f)), MaterialSpecular(SColorf(0.f, 0.f, 0.f)),
MaterialShininess(0.f), FogEnable(0), FogType(1), FogColor(SColorf(0.f, 0.f, 0.f, 1.f)), FogStart(0.f), FogEnd(0.f), FogDensity(0.f), Thickness(1.f)
{
for (u32 i = 0; i < 8; ++i)
@ -40,6 +40,7 @@ void COGLES2MaterialBaseCB::OnSetMaterial(const SMaterial& material)
LightEnable = material.Lighting;
MaterialAmbient = SColorf(material.AmbientColor);
MaterialDiffuse = SColorf(material.DiffuseColor);
MaterialEmissive = SColorf(material.EmissiveColor);
MaterialSpecular = SColorf(material.SpecularColor);
MaterialShininess = material.Shininess;
@ -60,6 +61,7 @@ void COGLES2MaterialBaseCB::OnSetConstants(IMaterialRendererServices* services,
GlobalAmbientID = services->getVertexShaderConstantID("uGlobalAmbient");
MaterialAmbientID = services->getVertexShaderConstantID("uMaterialAmbient");
MaterialDiffuseID = services->getVertexShaderConstantID("uMaterialDiffuse");
MaterialEmissiveID = services->getVertexShaderConstantID("uMaterialEmissive");
MaterialSpecularID = services->getVertexShaderConstantID("uMaterialSpecular");
MaterialShininessID = services->getVertexShaderConstantID("uMaterialShininess");
LightCountID = services->getVertexShaderConstantID("uLightCount");
@ -105,6 +107,7 @@ void COGLES2MaterialBaseCB::OnSetConstants(IMaterialRendererServices* services,
// TODO: this are all vertex shader constants, why are they all set as pixel shader constants? (it currently works so I'm scared to change it...)
services->setPixelShaderConstant(MaterialAmbientID, reinterpret_cast<f32*>(&MaterialAmbient), 4);
services->setPixelShaderConstant(MaterialDiffuseID, reinterpret_cast<f32*>(&MaterialDiffuse), 4);
services->setPixelShaderConstant(MaterialEmissiveID, reinterpret_cast<f32*>(&MaterialEmissive), 4);
services->setPixelShaderConstant(MaterialSpecularID, reinterpret_cast<f32*>(&MaterialSpecular), 4);
services->setPixelShaderConstant(MaterialShininessID, &MaterialShininess, 1);

View File

@ -35,6 +35,7 @@ protected:
s32 GlobalAmbientID;
s32 MaterialAmbientID;
s32 MaterialDiffuseID;
s32 MaterialEmissiveID;
s32 MaterialSpecularID;
s32 MaterialShininessID;
@ -60,6 +61,7 @@ protected:
SColorf GlobalAmbient;
SColorf MaterialAmbient;
SColorf MaterialDiffuse;
SColorf MaterialEmissive;
SColorf MaterialSpecular;
f32 MaterialShininess;