From 3370f0ed85e19c48306a40be8a8e66da226e44c9 Mon Sep 17 00:00:00 2001 From: Metehan Tuncbilek Date: Tue, 6 Aug 2024 17:23:35 +0300 Subject: [PATCH] first test --- openVulkanoCpp/Math/RGB565.hpp | 57 +++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/openVulkanoCpp/Math/RGB565.hpp b/openVulkanoCpp/Math/RGB565.hpp index 1600b5a..d80c34e 100644 --- a/openVulkanoCpp/Math/RGB565.hpp +++ b/openVulkanoCpp/Math/RGB565.hpp @@ -7,20 +7,20 @@ #pragma once #include "Math/Math.hpp" +#include namespace OpenVulkano::Math { class RGB565 { - uint16_t Make5(uint8_t val) - { - return val * 31.0f / 255.0f; - } - - uint16_t Make6(uint8_t val) - { - return val * 63.0f / 255.0f; - } + static uint16_t Make5(uint8_t val) { return val * 31.0f / 255.0f; } + static uint16_t Make6(uint8_t val) { return val * 63.0f / 255.0f; } + static uint8_t Unmake5(uint16_t val) { return static_cast(val * 255.0f / 31.0f); } + static uint8_t Unmake6(uint16_t val) { return static_cast(val * 255.0f / 63.0f); } + static float Unmake5ToFloat(uint16_t val) {return std::clamp(val / 31.0f, 0.0f, 1.0f); } + static float Unmake6ToFloat(uint16_t val) { return std::clamp(val / 63.0f, 0.0f, 1.0f); } + static uint16_t Make5FromFloat(float val) { return (uint16_t)std::clamp(val * 31.0f, 0.0f, 31.f); } + static uint16_t Make6FromFloat(float val) { return (uint16_t) std::clamp(val * 63.0f, 0.0f, 63.f); } public: union @@ -34,12 +34,39 @@ namespace OpenVulkano::Math }; }; - RGB565(Math::Vector4uc color = {0, 0, 0, 1}) - : b(Make5(color.b)) - , g(Make6(color.g)) - , r(Make5(color.r)) - { - } + RGB565(Math::Vector4uc color = { 0, 0, 0, 1 }) : b(Make5(color.b)), g(Make6(color.g)), r(Make5(color.r)) {} + RGB565(Math::Vector3uc color = { 0, 0, 0 }) : b(Make5(color.b)), g(Make6(color.g)), r(Make5(color.r)) {} + RGB565(Math::Vector4uc_SIMD color = { 0, 0, 0, 1 }) : b(Make5(color.b)), g(Make6(color.g)), r(Make5(color.r)) {} + RGB565(Math::Vector3uc_SIMD color = { 0, 0, 0 }) : b(Make5(color.b)), g(Make6(color.g)), r(Make5(color.r)) {} + RGB565(Math::Vector4f color = {0.f, 0.f, 0.f, 1.f}) : b(Make5FromFloat(color.b)), g(Make6FromFloat(color.g)), r(Make5FromFloat(color.r)) {} + RGB565(Math::Vector3f color = { 0.f, 0.f, 0.f }) : b(Make5FromFloat(color.b)), g(Make6FromFloat(color.g)), r(Make5FromFloat(color.r)) {} + RGB565(Math::Vector3f_SIMD color = { 0.f, 0.f, 0.f }) : b(Make5FromFloat(color.b)), g(Make6FromFloat(color.g)), r(Make5FromFloat(color.r)) {} + RGB565(Math::Vector4f_SIMD color = { 0.f, 0.f, 0.f, 1.f }) : b(Make5FromFloat(color.b)), g(Make6FromFloat(color.g)), r(Make5FromFloat(color.r)) {} + + + uint8_t GetR() { return Unmake5(r); } + uint8_t GetG() { return Unmake6(g); } + uint8_t GetB() { return Unmake5(b); } + + Math::Vector4uc GetColor() { return { GetR(), GetG(), GetB(), 1 }; } + + void SetR(uint8_t red) { r = Make5(red); } + void SetG(uint8_t green) { g = Make6(green); } + void SetB(uint8_t blue) { b = Make5(blue); } + + void SetColor(Math::Vector4uc color) { b = Make5(color.b); g = Make6(color.g); r = Make5(color.r); } + + float GetRFloat() { return Unmake5ToFloat(r); } + float GetGFloat() { return Unmake6ToFloat(g); } + float GetBFloat() { return Unmake5ToFloat(b); } + + Math::Vector4f GetColorFloat() { return { GetRFloat(), GetGFloat(), GetBFloat(), 1.0f }; } + + void SetRNormalized(float red) { r = Make5FromFloat(red); } + void SetGNormalized(float green) { g = Make6FromFloat(green); } + void SetBNormalized(float blue) { b = Make5FromFloat(blue); } + + void SetColorNormalized(Math::Vector4f color) { b = Make5FromFloat(color.b); g = Make6FromFloat(color.g); r = Make5FromFloat(color.r); } }; static_assert(sizeof(RGB565) == 2);