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 TransparentAlphaChannelRef 7
|
||||||
#define TransparentVertexAlpha 8
|
#define TransparentVertexAlpha 8
|
||||||
#define TransparentReflection2Layer 9
|
#define TransparentReflection2Layer 9
|
||||||
|
#define StkGrass 10
|
||||||
|
|
||||||
/* Uniforms */
|
/* Uniforms */
|
||||||
|
|
||||||
@ -101,6 +102,16 @@ vec4 renderTransparent()
|
|||||||
return Color;
|
return Color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vec4 renderTransparentVertexColor()
|
||||||
|
{
|
||||||
|
vec4 Color = varVertexColor;
|
||||||
|
|
||||||
|
if(uTextureUsage0)
|
||||||
|
Color *= texture2D(uTextureUnit0, varTexCoord0);
|
||||||
|
|
||||||
|
return Color;
|
||||||
|
}
|
||||||
|
|
||||||
void main ()
|
void main ()
|
||||||
{
|
{
|
||||||
if (uMaterialType == Solid)
|
if (uMaterialType == Solid)
|
||||||
@ -119,11 +130,16 @@ void main ()
|
|||||||
gl_FragColor = renderTransparent();
|
gl_FragColor = renderTransparent();
|
||||||
else if(uMaterialType == TransparentAlphaChannelRef)
|
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)
|
if (Color.a < 0.5)
|
||||||
discard;
|
discard;
|
||||||
|
|
||||||
gl_FragColor = Color;
|
gl_FragColor = Color;
|
||||||
}
|
}
|
||||||
else if(uMaterialType == TransparentVertexAlpha)
|
else if(uMaterialType == TransparentVertexAlpha)
|
||||||
@ -142,4 +158,4 @@ void main ()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
||||||
}
|
}
|
||||||
|
@ -192,6 +192,9 @@ namespace video
|
|||||||
/** Using only first texture. Generic blending method. */
|
/** Using only first texture. Generic blending method. */
|
||||||
EMT_ONETEXTURE_BLEND,
|
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.
|
//! This value is not used. It only forces this enumeration to compile to 32 bit.
|
||||||
EMT_FORCE_32BIT = 0x7fffffff
|
EMT_FORCE_32BIT = 0x7fffffff
|
||||||
};
|
};
|
||||||
|
@ -435,7 +435,7 @@ namespace video
|
|||||||
addAndDropMaterialRenderer(new COGLES2ParallaxMapRenderer(PMVSData, PMFSData, EMT_PARALLAX_MAP_TRANSPARENT_VERTEX_ALPHA, this));
|
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_ONETEXTURE_BLEND, this));
|
||||||
|
addAndDropMaterialRenderer(new COGLES2FixedPipelineRenderer(FPVSData, FPFSData, EMT_STK_GRASS, this));
|
||||||
delete[] FPVSData;
|
delete[] FPVSData;
|
||||||
delete[] FPFSData;
|
delete[] FPFSData;
|
||||||
delete[] NMVSData;
|
delete[] NMVSData;
|
||||||
|
@ -129,6 +129,9 @@ bool COGLES2FixedPipelineRenderer::OnRender(IMaterialRendererServices* service,
|
|||||||
case EMT_TRANSPARENT_REFLECTION_2_LAYER:
|
case EMT_TRANSPARENT_REFLECTION_2_LAYER:
|
||||||
materialType = 9;
|
materialType = 9;
|
||||||
break;
|
break;
|
||||||
|
case EMT_STK_GRASS:
|
||||||
|
materialType = 10;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -819,6 +819,9 @@ void Material::setMaterialProperties(video::SMaterial *m, scene::IMeshBuffer* m
|
|||||||
}
|
}
|
||||||
else if (m_shader_name == "grass")
|
else if (m_shader_name == "grass")
|
||||||
{
|
{
|
||||||
|
#ifdef USE_GLES2
|
||||||
|
m->MaterialType = video::EMT_STK_GRASS;
|
||||||
|
#else
|
||||||
m->MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
m->MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF;
|
||||||
|
|
||||||
#ifndef SERVER_ONLY
|
#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->EmissiveColor = video::SColor(255, 150, 150, 150);
|
||||||
m->SpecularColor = video::SColor(255, 150, 150, 150);
|
m->SpecularColor = video::SColor(255, 150, 150, 150);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user