diff --git a/source/blender/draw/engines/eevee_next/eevee_reflection_probes.cc b/source/blender/draw/engines/eevee_next/eevee_reflection_probes.cc index e1a40e27e73..1bfb3afe368 100644 --- a/source/blender/draw/engines/eevee_next/eevee_reflection_probes.cc +++ b/source/blender/draw/engines/eevee_next/eevee_reflection_probes.cc @@ -21,7 +21,7 @@ void ReflectionProbeModule::init() world_probe_data.layer = 0; world_probe_data.layer_subdivision = 0; world_probe_data.area_index = 0; - world_probe_data.pos = float3(0.0f); + world_probe_data.pos = float4(0.0f); data_buf_[0] = world_probe_data; ReflectionProbe world_probe; @@ -125,7 +125,7 @@ void ReflectionProbeModule::sync_object(Object *ob, ObjectHandle &ob_handle) probe_data.area_index = new_probe_data.area_index; } - probe_data.pos = float3(float4x4(ob->object_to_world) * float4(0.0, 0.0, 0.0, 1.0)); + probe_data.pos = float4x4(ob->object_to_world) * float4(0.0, 0.0, 0.0, 1.0); } ReflectionProbe &ReflectionProbeModule::find_or_insert(ObjectHandle &ob_handle, @@ -458,7 +458,7 @@ std::optional ReflectionProbeModule::update_info_pop( info.object_key = item.key; info.resolution = 1 << (max_shift - probe_data.layer_subdivision - 1); info.clipping_distances = item.value.clipping_distances; - info.probe_pos = probe_data.pos; + info.probe_pos = float3(probe_data.pos); if (cubemap_tx_.ensure_cube(GPU_RGBA16F, info.resolution, diff --git a/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh b/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh index ac28cf72960..ea2fa8d9a6a 100644 --- a/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh +++ b/source/blender/draw/engines/eevee_next/eevee_shader_shared.hh @@ -1033,8 +1033,10 @@ struct ReflectionProbeData { /** * Position of the light probe in world space. * World probe uses origin. + * + * 4th component is not used. */ - packed_float3 pos; + float4 pos; /** On which layer of the texture array is this reflection probe stored. */ int layer; @@ -1056,8 +1058,6 @@ struct ReflectionProbeData { * LOD factor for mipmap selection. */ float lod_factor; - - int _pad[1]; }; BLI_STATIC_ASSERT_ALIGN(ReflectionProbeData, 16) diff --git a/source/blender/draw/engines/eevee_next/shaders/eevee_reflection_probe_eval_lib.glsl b/source/blender/draw/engines/eevee_next/shaders/eevee_reflection_probe_eval_lib.glsl index f1b2835952e..0208bdf1aa3 100644 --- a/source/blender/draw/engines/eevee_next/shaders/eevee_reflection_probe_eval_lib.glsl +++ b/source/blender/draw/engines/eevee_next/shaders/eevee_reflection_probe_eval_lib.glsl @@ -65,7 +65,7 @@ int reflection_probes_find_closest(vec3 P) for (int index = 1; reflection_probe_buf[index].layer != -1 && index < REFLECTION_PROBES_MAX; index++) { - float dist = distance(P, reflection_probe_buf[index].pos); + float dist = distance(P, reflection_probe_buf[index].pos.xyz); if (dist < closest_distance) { closest_distance = dist; closest_index = index;