|
@@ -721,6 +721,14 @@ void RenderForwardClustered::_fill_instance_data(RenderListType p_render_list, i
|
|
|
if (inst->store_transform_cache) {
|
|
|
RendererRD::MaterialStorage::store_transform(inst->transform, instance_data.transform);
|
|
|
RendererRD::MaterialStorage::store_transform(inst->prev_transform, instance_data.prev_transform);
|
|
|
+
|
|
|
+#ifdef REAL_T_IS_DOUBLE
|
|
|
+ // Split the origin into two components, the float approximation and the missing precision
|
|
|
+ // In the shader we will combine these back together to restore the lost precision.
|
|
|
+ RendererRD::MaterialStorage::split_double(inst->transform.origin.x, &instance_data.transform[12], &instance_data.transform[3]);
|
|
|
+ RendererRD::MaterialStorage::split_double(inst->transform.origin.y, &instance_data.transform[13], &instance_data.transform[7]);
|
|
|
+ RendererRD::MaterialStorage::split_double(inst->transform.origin.z, &instance_data.transform[14], &instance_data.transform[11]);
|
|
|
+#endif
|
|
|
} else {
|
|
|
RendererRD::MaterialStorage::store_transform(Transform3D(), instance_data.transform);
|
|
|
RendererRD::MaterialStorage::store_transform(Transform3D(), instance_data.prev_transform);
|
|
@@ -735,14 +743,6 @@ void RenderForwardClustered::_fill_instance_data(RenderListType p_render_list, i
|
|
|
instance_data.lightmap_uv_scale[2] = inst->lightmap_uv_scale.size.x;
|
|
|
instance_data.lightmap_uv_scale[3] = inst->lightmap_uv_scale.size.y;
|
|
|
|
|
|
-#ifdef REAL_T_IS_DOUBLE
|
|
|
- // Split the origin into two components, the float approximation and the missing precision
|
|
|
- // In the shader we will combine these back together to restore the lost precision.
|
|
|
- RendererRD::MaterialStorage::split_double(inst->transform.origin.x, &instance_data.transform[12], &instance_data.transform[3]);
|
|
|
- RendererRD::MaterialStorage::split_double(inst->transform.origin.y, &instance_data.transform[13], &instance_data.transform[7]);
|
|
|
- RendererRD::MaterialStorage::split_double(inst->transform.origin.z, &instance_data.transform[14], &instance_data.transform[11]);
|
|
|
-#endif
|
|
|
-
|
|
|
bool cant_repeat = instance_data.flags & INSTANCE_DATA_FLAG_MULTIMESH || inst->mesh_instance.is_valid();
|
|
|
|
|
|
if (prev_surface != nullptr && !cant_repeat && prev_surface->sort.sort_key1 == surface->sort.sort_key1 && prev_surface->sort.sort_key2 == surface->sort.sort_key2 && inst->mirror == prev_surface->owner->mirror && repeats < RenderElementInfo::MAX_REPEATS) {
|