Add EMT_STK_GRASS for GLES2 to draw grass material without vertex color
Now EMT_TRANSPARENT_ALPHA_CHANNEL_REF in GLES2 can be used with vertex color
This commit is contained in:
parent
874895ba11
commit
b3e41db14b
@ -12,6 +12,7 @@ precision mediump float;
|
||||
#define TransparentAlphaChannelRef 7
|
||||
#define TransparentVertexAlpha 8
|
||||
#define TransparentReflection2Layer 9
|
||||
#define StkGrass 10
|
||||
|
||||
/* Uniforms */
|
||||
|
||||
@ -101,6 +102,16 @@ vec4 renderTransparent()
|
||||
return Color;
|
||||
}
|
||||
|
||||
vec4 renderTransparentVertexColor()
|
||||
{
|
||||
vec4 Color = varVertexColor;
|
||||
|
||||
if(uTextureUsage0)
|
||||
Color *= texture2D(uTextureUnit0, varTexCoord0);
|
||||
|
||||
return Color;
|
||||
}
|
||||
|
||||
void main ()
|
||||
{
|
||||
if (uMaterialType == Solid)
|
||||
@ -119,11 +130,16 @@ void main ()
|
||||
gl_FragColor = renderTransparent();
|
||||
else if(uMaterialType == TransparentAlphaChannelRef)
|
||||
{
|
||||
vec4 Color = renderTransparent();
|
||||
|
||||
vec4 Color = renderTransparentVertexColor();
|
||||
if (Color.a < 0.5)
|
||||
discard;
|
||||
gl_FragColor = Color;
|
||||
}
|
||||
else if(uMaterialType == StkGrass)
|
||||
{
|
||||
vec4 Color = renderTransparent();
|
||||
if (Color.a < 0.5)
|
||||
discard;
|
||||
|
||||
gl_FragColor = Color;
|
||||
}
|
||||
else if(uMaterialType == TransparentVertexAlpha)
|
||||
|
@ -192,6 +192,9 @@ namespace video
|
||||
/** Using only first texture. Generic blending method. */
|
||||
EMT_ONETEXTURE_BLEND,
|
||||
|
||||
//! Alphatest material for grass without using vertex color in stk. */
|
||||
EMT_STK_GRASS,
|
||||
|
||||
//! This value is not used. It only forces this enumeration to compile to 32 bit.
|
||||
EMT_FORCE_32BIT = 0x7fffffff
|
||||
};
|
||||
|
@ -435,7 +435,7 @@ namespace video
|
||||
addAndDropMaterialRenderer(new COGLES2ParallaxMapRenderer(PMVSData, PMFSData, EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA, this));
|
||||
|
||||
addAndDropMaterialRenderer(new COGLES2FixedPipelineRenderer(FPVSData, FPFSData, EMT_ONETEXTURE_BLEND, this));
|
||||
|
||||
addAndDropMaterialRenderer(new COGLES2FixedPipelineRenderer(FPVSData, FPFSData, EMT_STK_GRASS, this));
|
||||
delete[] FPVSData;
|
||||
delete[] FPFSData;
|
||||
delete[] NMVSData;
|
||||
|
@ -129,6 +129,9 @@ bool COGLES2FixedPipelineRenderer::OnRender(IMaterialRendererServices* service,
|
||||
case EMT_TRANSPARENT_REFLECTION_2_LAYER:
|
||||
materialType = 9;
|
||||
break;
|
||||
case EMT_STK_GRASS:
|
||||
materialType = 10;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -819,6 +819,9 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m
|
||||
}
|
||||
else if (m_shader_name == "grass")
|
||||
{
|
||||
#ifdef USE_GLES2
|
||||
m->MaterialType = video::EMT_STK_GRASS;
|
||||
#else
|
||||
m->MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||
|
||||
#ifndef SERVER_ONLY
|
||||
@ -831,6 +834,8 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m
|
||||
m->EmissiveColor = video::SColor(255, 150, 150, 150);
|
||||
m->SpecularColor = video::SColor(255, 150, 150, 150);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user