From a6c3a1e9325aae702b30d334acc6a6b8ff2f37f4 Mon Sep 17 00:00:00 2001 From: Frederico Linhares Date: Mon, 10 Mar 2025 15:00:11 -0300 Subject: feat Create BinaryWriter --- src/blu_cat/gra/binary_reader.cpp | 156 -------------------------------------- src/blu_cat/gra/binary_reader.hpp | 69 ----------------- src/blu_cat/gra/qoi.cpp | 4 +- src/blu_cat/gra/skeletal_mesh.cpp | 16 ++-- src/blu_cat/gra/static_mesh.cpp | 2 +- src/blu_cat/gra/vulkan.hpp | 14 +--- 6 files changed, 13 insertions(+), 248 deletions(-) delete mode 100644 src/blu_cat/gra/binary_reader.cpp delete mode 100644 src/blu_cat/gra/binary_reader.hpp (limited to 'src/blu_cat/gra') diff --git a/src/blu_cat/gra/binary_reader.cpp b/src/blu_cat/gra/binary_reader.cpp deleted file mode 100644 index 14fc39c..0000000 --- a/src/blu_cat/gra/binary_reader.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright 2022-2024 Frederico de Oliveira Linhares - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "binary_reader.hpp" - -#include - -namespace -{ - -union IntAndFloat32bit{ - uint32_t i; - float f; -}; - -union IntAndFloat64bit{ - uint64_t i; - double f; -}; - -} - -BinaryReader::BinaryReader(std::string file_path): - _pointer{0} -{ - std::ifstream file(file_path, std::ios::binary | std::ios::ate); - if(!file.is_open()) - { - std::string error{"failed to open file: "}; - error += file_path; - throw std::runtime_error{error}; - } - - this->_size = file.tellg(); - file.seekg(0); - this->data = new uint8_t[this->_size]; - file.read((char*)data, this->_size); -} - -BinaryReader::BinaryReader(const char *file_path): - BinaryReader{std::string(file_path)} -{ -} - -BinaryReader::~BinaryReader() -{ - delete[] this->data; -} - -uint8_t -BinaryReader::read_ui8() -{ - return this->data[this->_pointer++]; -} - -uint32_t -BinaryReader::read_ui32() -{ - uint8_t b1{this->data[_pointer++]}, b2{this->data[_pointer++]}, - b3{this->data[_pointer++]}, b4{this->data[_pointer++]}; - - return b1 << 24 | b2 << 16 | b3 << 8 | b4; -} - -uint64_t -BinaryReader::read_ui64() -{ - uint8_t b1{this->data[_pointer++]}, b2{this->data[_pointer++]}, - b3{this->data[_pointer++]}, b4{this->data[_pointer++]}, - b5{this->data[_pointer++]}, b6{this->data[_pointer++]}, - b7{this->data[_pointer++]}, b8{this->data[_pointer++]}; - - return (uint64_t)b1 << 56 | (uint64_t)b2 << 48 | (uint64_t)b3 << 40 | - (uint64_t)b4 << 32 | (uint64_t)b5 << 24 | (uint64_t)b6 << 16 | - (uint64_t)b7 << 8 | (uint64_t)b8; -} - -float -BinaryReader::read_float() -{ - IntAndFloat32bit num; - num.i = read_ui32(); - - return num.f; -} - -double -BinaryReader::read_double() -{ - IntAndFloat64bit num; - num.i = read_ui64(); - - return num.f; -} - -glm::vec2 -BinaryReader::read_vec2() -{ - IntAndFloat32bit x{read_ui32()}, y{read_ui32()}; - - return glm::vec2{x.f, y.f}; -} - -glm::vec3 -BinaryReader::read_vec3() -{ - IntAndFloat32bit x{read_ui32()}, y{read_ui32()}, z{read_ui32()}; - - return glm::vec3{x.f, y.f, z.f}; -} - -glm::quat -BinaryReader::read_quat() -{ - IntAndFloat32bit w{read_ui32()}, x{read_ui32()}, y{read_ui32()}, - z{read_ui32()}; - - return glm::quat{w.f, x.f, y.f, z.f}; -} - -glm::mat4 -BinaryReader::read_mat4() -{ - glm::mat4 matrix; - float *offset_matrix_data{glm::value_ptr(matrix)}; - - for(int i{0}; i < 16; i++) - { - IntAndFloat32bit num; - num.i = read_ui32(); - offset_matrix_data[i] = num.f; - } - - return matrix; -} - -void -BinaryReader::read_chars(char *str, int size) -{ - for(int i{0}; i < size; i++) - str[i] = (char)data[this->_pointer++]; -} - diff --git a/src/blu_cat/gra/binary_reader.hpp b/src/blu_cat/gra/binary_reader.hpp deleted file mode 100644 index 1995402..0000000 --- a/src/blu_cat/gra/binary_reader.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2022-2024 Frederico de Oliveira Linhares - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include - -#include "vulkan.hpp" - -class BinaryReader -{ - int _pointer; - int _size; - uint8_t *data; - -public: - - BinaryReader(const std::string file_path); - BinaryReader(const char *file_path); - ~BinaryReader(); - - inline int - pointer(){return this->_pointer;}; - - inline int - size(){return this->_size;}; - - uint8_t - read_ui8(); - - uint32_t - read_ui32(); - - uint64_t - read_ui64(); - - float - read_float(); - - double - read_double(); - - glm::vec2 - read_vec2(); - - glm::vec3 - read_vec3(); - - glm::quat - read_quat(); - - glm::mat4 - read_mat4(); - - void - read_chars(char *str, int size); -}; diff --git a/src/blu_cat/gra/qoi.cpp b/src/blu_cat/gra/qoi.cpp index 790516d..40968df 100644 --- a/src/blu_cat/gra/qoi.cpp +++ b/src/blu_cat/gra/qoi.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2022-2024 Frederico de Oliveira Linhares + * Copyright 2022-2025 Frederico de Oliveira Linhares * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ #include #include -#include "binary_reader.hpp" +#include "../com/binary_reader.hpp" namespace { diff --git a/src/blu_cat/gra/skeletal_mesh.cpp b/src/blu_cat/gra/skeletal_mesh.cpp index 89d701b..1beed1a 100644 --- a/src/blu_cat/gra/skeletal_mesh.cpp +++ b/src/blu_cat/gra/skeletal_mesh.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2022-2024 Frederico de Oliveira Linhares + * Copyright 2022-2025 Frederico de Oliveira Linhares * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ #include "skeletal_mesh.hpp" -#include "binary_reader.hpp" +#include "../com/binary_reader.hpp" #include "../com/command.hpp" #include "../int/core.hpp" #include "skeletal_mesh_vertex.hpp" @@ -72,7 +72,7 @@ load_mesh(void *obj) for(auto ii{0}; ii < BluCat::GRA::SKELETAL_MESH_MAX_NUM_OF_INFLUENCING_BONES; ii++) - vertexes[i].bone_weights[ii] = input.read_float(); + vertexes[i].bone_weights[ii] = input.read_f32(); } void *vertexes_data{vertexes.data()}; @@ -112,10 +112,10 @@ load_mesh(void *obj) self->mesh->animations.resize(num_animations); for(uint32_t i{0}; i < num_animations; i++) { - auto duration{input.read_double()}; + auto duration{input.read_f64()}; self->mesh->animations[i].final_time = (float)duration; - auto ticks_per_second{input.read_double()}; + auto ticks_per_second{input.read_f64()}; auto num_bone_transforms{input.read_ui32()}; std::vector *bone_transforms = @@ -133,7 +133,7 @@ load_mesh(void *obj) position_key_index++) { auto vec3{input.read_vec3()}; - auto timestamp{input.read_double()}; + auto timestamp{input.read_f64()}; positions->key_frames.emplace_back( vec3, static_cast(timestamp)); } @@ -145,7 +145,7 @@ load_mesh(void *obj) rotation_key_index++) { auto quat{input.read_quat()}; - auto timestamp{input.read_double()}; + auto timestamp{input.read_f64()}; rotations->key_frames.emplace_back( quat, static_cast(timestamp)); } @@ -157,7 +157,7 @@ load_mesh(void *obj) scaling_key_index++) { auto vec3{input.read_vec3()}; - auto timestamp{input.read_double()}; + auto timestamp{input.read_f64()}; scales->key_frames.emplace_back(vec3, static_cast(timestamp)); } } diff --git a/src/blu_cat/gra/static_mesh.cpp b/src/blu_cat/gra/static_mesh.cpp index db3a6ee..0d95590 100644 --- a/src/blu_cat/gra/static_mesh.cpp +++ b/src/blu_cat/gra/static_mesh.cpp @@ -16,7 +16,7 @@ #include "static_mesh.hpp" -#include "binary_reader.hpp" +#include "../com/binary_reader.hpp" #include "../com/command.hpp" #include "../int/core.hpp" #include "static_mesh_vertex.hpp" diff --git a/src/blu_cat/gra/vulkan.hpp b/src/blu_cat/gra/vulkan.hpp index fcf6628..73c599f 100644 --- a/src/blu_cat/gra/vulkan.hpp +++ b/src/blu_cat/gra/vulkan.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2022-2024 Frederico de Oliveira Linhares + * Copyright 2022-2025 Frederico de Oliveira Linhares * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,17 +17,7 @@ #ifndef BLU_CAT_GRA_VULKAN_H #define BLU_CAT_GRA_VULKAN_H 1 -// GLM uses some definitions to control their behavior, so you should not -// include it directly. Instead, use this header. -#define GLM_ENABLE_EXPERIMENTAL -#define GLM_FORCE_RADIANS -#define GLM_FORCE_DEPTH_ZERO_TO_ONE - -#include -#include -#include -#include -#include +#include "../com/numbers.hpp" #include -- cgit v1.2.3