mirror of
https://github.com/godotengine/godot.git
synced 2024-11-26 22:23:04 +00:00
[GLES2] fix depth for alpha pass
This commit is contained in:
parent
634673cf5b
commit
5ebc70f288
@ -837,7 +837,7 @@ static const GLenum gl_primitive[] = {
|
||||
GL_TRIANGLE_FAN
|
||||
};
|
||||
|
||||
void RasterizerSceneGLES2::_setup_material(RasterizerStorageGLES2::Material *p_material, bool p_reverse_cull, Size2i p_skeleton_tex_size) {
|
||||
void RasterizerSceneGLES2::_setup_material(RasterizerStorageGLES2::Material *p_material, bool p_reverse_cull, bool p_alpha_pass, Size2i p_skeleton_tex_size) {
|
||||
|
||||
// material parameters
|
||||
|
||||
@ -851,6 +851,20 @@ void RasterizerSceneGLES2::_setup_material(RasterizerStorageGLES2::Material *p_m
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
}
|
||||
|
||||
switch (p_material->shader->spatial.depth_draw_mode) {
|
||||
case RasterizerStorageGLES2::Shader::Spatial::DEPTH_DRAW_ALPHA_PREPASS:
|
||||
case RasterizerStorageGLES2::Shader::Spatial::DEPTH_DRAW_OPAQUE: {
|
||||
|
||||
glDepthMask(!p_alpha_pass);
|
||||
} break;
|
||||
case RasterizerStorageGLES2::Shader::Spatial::DEPTH_DRAW_ALWAYS: {
|
||||
glDepthMask(GL_TRUE);
|
||||
} break;
|
||||
case RasterizerStorageGLES2::Shader::Spatial::DEPTH_DRAW_NEVER: {
|
||||
glDepthMask(GL_FALSE);
|
||||
} break;
|
||||
}
|
||||
|
||||
// TODO whyyyyy????
|
||||
p_reverse_cull = true;
|
||||
|
||||
@ -1432,7 +1446,7 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements,
|
||||
|
||||
_setup_geometry(e, skeleton);
|
||||
|
||||
_setup_material(material, p_reverse_cull, Size2i(skeleton ? skeleton->size * 3 : 0, 0));
|
||||
_setup_material(material, p_reverse_cull, p_alpha_pass, Size2i(skeleton ? skeleton->size * 3 : 0, 0));
|
||||
|
||||
if (use_radiance_map) {
|
||||
state.scene_shader.set_uniform(SceneShaderGLES2::RADIANCE_INVERSE_XFORM, p_view_transform);
|
||||
@ -1568,7 +1582,7 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements,
|
||||
{
|
||||
_setup_geometry(e, skeleton);
|
||||
|
||||
_setup_material(material, p_reverse_cull, Size2i(skeleton ? skeleton->size * 3 : 0, 0));
|
||||
_setup_material(material, p_reverse_cull, p_alpha_pass, Size2i(skeleton ? skeleton->size * 3 : 0, 0));
|
||||
if (shadow_atlas != NULL) {
|
||||
glActiveTexture(GL_TEXTURE0 + storage->config.max_texture_image_units - 4);
|
||||
glBindTexture(GL_TEXTURE_2D, shadow_atlas->depth);
|
||||
@ -1757,7 +1771,7 @@ void RasterizerSceneGLES2::_render_render_list(RenderList::Element **p_elements,
|
||||
RasterizerStorageGLES2::Skeleton *skeleton = storage->skeleton_owner.getornull(e->instance->skeleton);
|
||||
|
||||
{
|
||||
_setup_material(material, p_reverse_cull, Size2i(skeleton ? skeleton->size * 3 : 0, 0));
|
||||
_setup_material(material, p_reverse_cull, false, Size2i(skeleton ? skeleton->size * 3 : 0, 0));
|
||||
|
||||
if (directional_shadow.depth) {
|
||||
glActiveTexture(GL_TEXTURE0 + storage->config.max_texture_image_units - 4); // TODO move into base pass
|
||||
|
@ -563,7 +563,7 @@ public:
|
||||
|
||||
void _draw_sky(RasterizerStorageGLES2::Sky *p_sky, const CameraMatrix &p_projection, const Transform &p_transform, bool p_vflip, float p_custom_fov, float p_energy);
|
||||
|
||||
void _setup_material(RasterizerStorageGLES2::Material *p_material, bool p_reverse_cull, Size2i p_skeleton_tex_size = Size2i(0, 0));
|
||||
void _setup_material(RasterizerStorageGLES2::Material *p_material, bool p_reverse_cull, bool p_alpha_pass, Size2i p_skeleton_tex_size = Size2i(0, 0));
|
||||
void _setup_geometry(RenderList::Element *p_element, RasterizerStorageGLES2::Skeleton *p_skeleton);
|
||||
void _render_geometry(RenderList::Element *p_element);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user