summaryrefslogtreecommitdiff
path: root/src/binary_reader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/binary_reader.cpp')
-rw-r--r--src/binary_reader.cpp61
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)
{