You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-04 12:00:25 +00:00
Add depth function for spatial materials
This commit is contained in:
@@ -32,6 +32,7 @@
|
||||
|
||||
#include "drivers/gles3/effects/copy_effects.h"
|
||||
#include "drivers/gles3/effects/feed_effects.h"
|
||||
#include "drivers/gles3/storage/material_storage.h"
|
||||
#include "rasterizer_gles3.h"
|
||||
#include "storage/config.h"
|
||||
#include "storage/mesh_storage.h"
|
||||
@@ -223,10 +224,10 @@ void RasterizerSceneGLES3::_geometry_instance_add_surface_with_material(Geometry
|
||||
flags |= GeometryInstanceSurface::FLAG_USES_DOUBLE_SIDED_SHADOWS;
|
||||
}
|
||||
|
||||
if (has_alpha || has_read_screen_alpha || p_material->shader_data->depth_draw == GLES3::SceneShaderData::DEPTH_DRAW_DISABLED || p_material->shader_data->depth_test == GLES3::SceneShaderData::DEPTH_TEST_DISABLED) {
|
||||
if (has_alpha || has_read_screen_alpha || p_material->shader_data->depth_draw == GLES3::SceneShaderData::DEPTH_DRAW_DISABLED || p_material->shader_data->depth_test != GLES3::SceneShaderData::DEPTH_TEST_ENABLED) {
|
||||
//material is only meant for alpha pass
|
||||
flags |= GeometryInstanceSurface::FLAG_PASS_ALPHA;
|
||||
if (p_material->shader_data->uses_depth_prepass_alpha && !(p_material->shader_data->depth_draw == GLES3::SceneShaderData::DEPTH_DRAW_DISABLED || p_material->shader_data->depth_test == GLES3::SceneShaderData::DEPTH_TEST_DISABLED)) {
|
||||
if (p_material->shader_data->uses_depth_prepass_alpha && !(p_material->shader_data->depth_draw == GLES3::SceneShaderData::DEPTH_DRAW_DISABLED || p_material->shader_data->depth_test != GLES3::SceneShaderData::DEPTH_TEST_ENABLED)) {
|
||||
flags |= GeometryInstanceSurface::FLAG_PASS_DEPTH;
|
||||
flags |= GeometryInstanceSurface::FLAG_PASS_SHADOW;
|
||||
}
|
||||
@@ -2184,7 +2185,7 @@ void RasterizerSceneGLES3::_render_shadow_pass(RID p_light, RID p_shadow_atlas,
|
||||
scene_state.reset_gl_state();
|
||||
scene_state.enable_gl_depth_test(true);
|
||||
scene_state.enable_gl_depth_draw(true);
|
||||
glDepthFunc(GL_GREATER);
|
||||
scene_state.set_gl_depth_func(GL_GREATER);
|
||||
|
||||
glColorMask(0, 0, 0, 0);
|
||||
glDrawBuffers(0, nullptr);
|
||||
@@ -2503,7 +2504,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
||||
scene_state.enable_gl_depth_test(true);
|
||||
scene_state.enable_gl_depth_draw(true);
|
||||
scene_state.enable_gl_blend(false);
|
||||
glDepthFunc(GL_GEQUAL);
|
||||
scene_state.set_gl_depth_func(GL_GEQUAL);
|
||||
scene_state.enable_gl_scissor_test(false);
|
||||
|
||||
glColorMask(0, 0, 0, 0);
|
||||
@@ -2541,7 +2542,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
||||
scene_state.enable_gl_scissor_test(false);
|
||||
scene_state.enable_gl_depth_test(true);
|
||||
scene_state.enable_gl_depth_draw(true);
|
||||
glDepthFunc(GL_GEQUAL);
|
||||
scene_state.set_gl_depth_func(GL_GEQUAL);
|
||||
|
||||
{
|
||||
GLuint db = GL_COLOR_ATTACHMENT0;
|
||||
@@ -2635,6 +2636,7 @@ void RasterizerSceneGLES3::render_scene(const Ref<RenderSceneBuffers> &p_render_
|
||||
RENDER_TIMESTAMP("Render Sky");
|
||||
|
||||
scene_state.enable_gl_depth_test(true);
|
||||
scene_state.set_gl_depth_func(GL_GEQUAL);
|
||||
scene_state.enable_gl_blend(false);
|
||||
scene_state.set_gl_cull_mode(RS::CULL_MODE_BACK);
|
||||
|
||||
@@ -3016,7 +3018,13 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
|
||||
}
|
||||
|
||||
if constexpr (p_pass_mode == PASS_MODE_COLOR_TRANSPARENT) {
|
||||
scene_state.enable_gl_depth_test(shader->depth_test == GLES3::SceneShaderData::DEPTH_TEST_ENABLED);
|
||||
scene_state.enable_gl_depth_test(shader->depth_test != GLES3::SceneShaderData::DEPTH_TEST_DISABLED);
|
||||
}
|
||||
|
||||
if (shader->depth_test == GLES3::SceneShaderData::DEPTH_TEST_ENABLED_INVERTED) {
|
||||
scene_state.set_gl_depth_func(GL_LESS);
|
||||
} else {
|
||||
scene_state.set_gl_depth_func(GL_GEQUAL);
|
||||
}
|
||||
|
||||
if constexpr (p_pass_mode != PASS_MODE_SHADOW) {
|
||||
@@ -3713,7 +3721,7 @@ void RasterizerSceneGLES3::render_particle_collider_heightfield(RID p_collider,
|
||||
scene_state.reset_gl_state();
|
||||
scene_state.enable_gl_depth_test(true);
|
||||
scene_state.enable_gl_depth_draw(true);
|
||||
glDepthFunc(GL_GREATER);
|
||||
scene_state.set_gl_depth_func(GL_GREATER);
|
||||
|
||||
glDrawBuffers(0, nullptr);
|
||||
|
||||
@@ -3759,7 +3767,7 @@ void RasterizerSceneGLES3::_render_uv2(const PagedArray<RenderGeometryInstance *
|
||||
scene_state.reset_gl_state();
|
||||
scene_state.enable_gl_depth_test(true);
|
||||
scene_state.enable_gl_depth_draw(true);
|
||||
glDepthFunc(GL_GREATER);
|
||||
scene_state.set_gl_depth_func(GL_GREATER);
|
||||
|
||||
TightLocalVector<GLenum> draw_buffers;
|
||||
draw_buffers.push_back(GL_COLOR_ATTACHMENT0);
|
||||
@@ -3852,7 +3860,7 @@ void RasterizerSceneGLES3::_render_buffers_debug_draw(Ref<RenderSceneBuffersGLES
|
||||
glViewport(0, 0, shadow_atlas_size, shadow_atlas_size);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
scene_state.enable_gl_depth_draw(true);
|
||||
glDepthFunc(GL_ALWAYS);
|
||||
scene_state.set_gl_depth_func(GL_ALWAYS);
|
||||
scene_state.set_gl_cull_mode(RS::CULL_MODE_DISABLED);
|
||||
|
||||
// Loop through quadrants and copy shadows over.
|
||||
|
||||
Reference in New Issue
Block a user