1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Merge pull request #68440 from clayjohn/redraw-TIME

Request redraw in OpenGL3 and mobile renderers when TIME used in shader
This commit is contained in:
Rémi Verschelde
2022-11-09 08:58:06 +01:00
committed by GitHub
2 changed files with 23 additions and 0 deletions

View File

@@ -1993,6 +1993,8 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
} }
} }
bool should_request_redraw = false;
for (uint32_t i = p_from_element; i < p_to_element; i++) { for (uint32_t i = p_from_element; i < p_to_element; i++) {
const GeometryInstanceSurface *surf = p_params->elements[i]; const GeometryInstanceSurface *surf = p_params->elements[i];
GeometryInstanceGLES3 *inst = surf->owner; GeometryInstanceGLES3 *inst = surf->owner;
@@ -2023,6 +2025,11 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
continue; continue;
} }
//request a redraw if one of the shaders uses TIME
if (shader->uses_time) {
should_request_redraw = true;
}
if constexpr (p_pass_mode == PASS_MODE_COLOR_TRANSPARENT) { if constexpr (p_pass_mode == PASS_MODE_COLOR_TRANSPARENT) {
if (scene_state.current_depth_test != shader->depth_test) { if (scene_state.current_depth_test != shader->depth_test) {
if (shader->depth_test == GLES3::SceneShaderData::DEPTH_TEST_DISABLED) { if (shader->depth_test == GLES3::SceneShaderData::DEPTH_TEST_DISABLED) {
@@ -2247,6 +2254,11 @@ void RasterizerSceneGLES3::_render_list_template(RenderListParameters *p_params,
glDisableVertexAttribArray(15); glDisableVertexAttribArray(15);
} }
} }
// Make the actual redraw request
if (should_request_redraw) {
RenderingServerDefault::redraw_request();
}
} }
void RasterizerSceneGLES3::render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) { void RasterizerSceneGLES3::render_material(const Transform3D &p_cam_transform, const Projection &p_cam_projection, bool p_cam_orthogonal, const PagedArray<RenderGeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) {

View File

@@ -2004,6 +2004,7 @@ void RenderForwardMobile::_render_list_template(RenderingDevice::DrawListID p_dr
RID prev_index_array_rd; RID prev_index_array_rd;
RID prev_pipeline_rd; RID prev_pipeline_rd;
RID prev_xforms_uniform_set; RID prev_xforms_uniform_set;
bool should_request_redraw = false;
bool shadow_pass = (p_params->pass_mode == PASS_MODE_SHADOW) || (p_params->pass_mode == PASS_MODE_SHADOW_DP); bool shadow_pass = (p_params->pass_mode == PASS_MODE_SHADOW) || (p_params->pass_mode == PASS_MODE_SHADOW_DP);
@@ -2090,6 +2091,11 @@ void RenderForwardMobile::_render_list_template(RenderingDevice::DrawListID p_dr
continue; continue;
} }
//request a redraw if one of the shaders uses TIME
if (shader->uses_time) {
should_request_redraw = true;
}
//find cull variant //find cull variant
SceneShaderForwardMobile::ShaderData::CullVariant cull_variant; SceneShaderForwardMobile::ShaderData::CullVariant cull_variant;
@@ -2191,6 +2197,11 @@ void RenderForwardMobile::_render_list_template(RenderingDevice::DrawListID p_dr
RD::get_singleton()->draw_list_draw(draw_list, index_array_rd.is_valid(), instance_count); RD::get_singleton()->draw_list_draw(draw_list, index_array_rd.is_valid(), instance_count);
} }
// Make the actual redraw request
if (should_request_redraw) {
RenderingServerDefault::redraw_request();
}
} }
/* Geometry instance */ /* Geometry instance */