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:
Benau 2018-11-30 23:33:30 +08:00
parent 874895ba11
commit b3e41db14b
5 changed files with 32 additions and 5 deletions

View File

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

View File

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

View File

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

View File

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

View File

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