Skip to content

Commit 0eb881b

Browse files
committed
Implement motion vectors in compatibility renderer
1 parent 3bf0f77 commit 0eb881b

14 files changed

+869
-328
lines changed

drivers/gles3/rasterizer_canvas_gles3.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,9 +1468,9 @@ void RasterizerCanvasGLES3::_render_batch(Light *p_lights, uint32_t p_index, Ren
14681468
uint64_t vertex_input_mask = state.canvas_instance_batches[p_index].vertex_input_mask;
14691469

14701470
if (mesh_instance.is_valid()) {
1471-
mesh_storage->mesh_instance_surface_get_vertex_arrays_and_format(mesh_instance, j, vertex_input_mask, vertex_array_gl);
1471+
mesh_storage->mesh_instance_surface_get_vertex_arrays_and_format(mesh_instance, j, vertex_input_mask, false, vertex_array_gl);
14721472
} else {
1473-
mesh_storage->mesh_surface_get_vertex_arrays_and_format(surface, vertex_input_mask, vertex_array_gl);
1473+
mesh_storage->mesh_surface_get_vertex_arrays_and_format(surface, vertex_input_mask, false, vertex_array_gl);
14741474
}
14751475

14761476
index_array_gl = mesh_storage->mesh_surface_get_index_buffer(surface, 0);

drivers/gles3/rasterizer_scene_gles3.cpp

Lines changed: 165 additions & 107 deletions
Large diffs are not rendered by default.

drivers/gles3/rasterizer_scene_gles3.h

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ enum PassMode {
6262
PASS_MODE_SHADOW,
6363
PASS_MODE_DEPTH,
6464
PASS_MODE_MATERIAL,
65+
PASS_MODE_MOTION_VECTORS,
6566
};
6667

6768
// These should share as much as possible with SkyUniform Location
@@ -301,6 +302,10 @@ class RasterizerSceneGLES3 : public RendererSceneRender {
301302
//used during rendering
302303
bool store_transform_cache = true;
303304

305+
// Used for generating motion vectors.
306+
Transform3D prev_transform;
307+
bool is_prev_transform_stored = false;
308+
304309
int32_t instance_count = 0;
305310

306311
bool can_sdfgi = false;
@@ -454,12 +459,16 @@ class RasterizerSceneGLES3 : public RendererSceneRender {
454459
};
455460
static_assert(sizeof(TonemapUBO) % 16 == 0, "Tonemap UBO size must be a multiple of 16 bytes");
456461

457-
UBO ubo;
462+
UBO data;
463+
UBO prev_data;
458464
GLuint ubo_buffer = 0;
459-
MultiviewUBO multiview_ubo;
465+
MultiviewUBO multiview_data;
466+
MultiviewUBO prev_multiview_data;
460467
GLuint multiview_buffer = 0;
461468
GLuint tonemap_buffer = 0;
462469

470+
bool is_prev_data_stored = false;
471+
463472
bool used_depth_prepass = false;
464473

465474
GLES3::SceneShaderData::BlendMode current_blend_mode = GLES3::SceneShaderData::BLEND_MODE_MIX;

0 commit comments

Comments
 (0)