diff options
Diffstat (limited to 'src/binary_reader.cpp')
-rw-r--r-- | src/binary_reader.cpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/binary_reader.cpp b/src/binary_reader.cpp index 5847328..04633a2 100644 --- a/src/binary_reader.cpp +++ b/src/binary_reader.cpp @@ -26,6 +26,11 @@ union IntAndFloat32bit{ float f; }; +union IntAndFloat64bit{ + uint64_t i; + double f; +}; + } BinaryReader::BinaryReader(std::string file_path): @@ -65,6 +70,37 @@ BinaryReader::read_ui32() 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() { @@ -81,6 +117,31 @@ BinaryReader::read_vec3() 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) { |