From 870b835115bf9008a56a2a2eb6a95a6873701830 Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Thu, 10 Mar 2022 20:43:28 +0100 Subject: [PATCH] LibGfx+LibSoftGPU: Allow indexed reads into `Gfx::Vector` --- Userland/Libraries/LibGfx/VectorN.h | 6 ++++++ Userland/Libraries/LibSoftGPU/Device.cpp | 25 +++--------------------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/Userland/Libraries/LibGfx/VectorN.h b/Userland/Libraries/LibGfx/VectorN.h index 64b13f374f..a8b64e723d 100644 --- a/Userland/Libraries/LibGfx/VectorN.h +++ b/Userland/Libraries/LibGfx/VectorN.h @@ -56,6 +56,12 @@ public: constexpr void set_z(T value) requires(N >= 3) { m_data[2] = value; } constexpr void set_w(T value) requires(N >= 4) { m_data[3] = value; } + [[nodiscard]] constexpr T operator[](size_t index) const + { + VERIFY(index < N); + return m_data[index]; + } + constexpr VectorN& operator+=(const VectorN& other) { UNROLL_LOOP diff --git a/Userland/Libraries/LibSoftGPU/Device.cpp b/Userland/Libraries/LibSoftGPU/Device.cpp index 5d45a554b6..20a43b5891 100644 --- a/Userland/Libraries/LibSoftGPU/Device.cpp +++ b/Userland/Libraries/LibSoftGPU/Device.cpp @@ -609,7 +609,7 @@ static void generate_texture_coordinates(Vertex& vertex, RasterizerOptions const auto const normal = vertex.normal; auto reflection = eye_unit_xyz - normal * 2 * normal.dot(eye_unit_xyz); reflection.set_z(reflection.z() + 1); - auto const reflection_value = (config_index == 0) ? reflection.x() : reflection.y(); + auto const reflection_value = reflection[config_index]; return reflection_value / (2 * reflection.length()) + 0.5f; } case TexCoordGenerationMode::ReflectionMap: { @@ -617,29 +617,10 @@ static void generate_texture_coordinates(Vertex& vertex, RasterizerOptions const FloatVector3 const eye_unit_xyz = eye_unit.xyz(); auto const normal = vertex.normal; auto reflection = eye_unit_xyz - normal * 2 * normal.dot(eye_unit_xyz); - switch (config_index) { - case 0: - return reflection.x(); - case 1: - return reflection.y(); - case 2: - return reflection.z(); - default: - VERIFY_NOT_REACHED(); - } + return reflection[config_index]; } case TexCoordGenerationMode::NormalMap: { - auto const normal = vertex.normal; - switch (config_index) { - case 0: - return normal.x(); - case 1: - return normal.y(); - case 2: - return normal.z(); - default: - VERIFY_NOT_REACHED(); - } + return vertex.normal[config_index]; } default: VERIFY_NOT_REACHED();