summaryrefslogtreecommitdiff
path: root/src/3d
diff options
context:
space:
mode:
Diffstat (limited to 'src/3d')
-rw-r--r--src/3d/object.h3
-rw-r--r--src/3d/renderer.h6
-rw-r--r--src/3d/scene_loader.cc36
3 files changed, 27 insertions, 18 deletions
diff --git a/src/3d/object.h b/src/3d/object.h
index dfd31ce..a8eb98c 100644
--- a/src/3d/object.h
+++ b/src/3d/object.h
@@ -43,7 +43,8 @@ class Object3D {
AssetId mesh_asset_id;
vec3 local_extent; // Half-extents for AABB (used by meshes for shadows)
void* user_data; // For tool-specific data, not for general use
- std::shared_ptr<void> shared_user_data; // For tool-specific data managed with shared ownership
+ std::shared_ptr<void>
+ shared_user_data; // For tool-specific data managed with shared ownership
Object3D(ObjectType t = ObjectType::CUBE)
: position(0, 0, 0), rotation(0, 0, 0, 1), scale(1, 1, 1), type(t),
diff --git a/src/3d/renderer.h b/src/3d/renderer.h
index 94a194d..bf3b497 100644
--- a/src/3d/renderer.h
+++ b/src/3d/renderer.h
@@ -30,11 +30,11 @@ struct ObjectData {
mat4 model;
mat4 inv_model;
vec4 color;
- // params.x = object type (as float), params.y = plane_distance (if applicable)
- vec4 params;
+ // params.x = object type (as float), params.y = plane_distance (if
+ // applicable)
+ vec4 params;
};
-
class Renderer3D {
public:
void init(WGPUDevice device, WGPUQueue queue, WGPUTextureFormat format);
diff --git a/src/3d/scene_loader.cc b/src/3d/scene_loader.cc
index 936d8a2..286edca 100644
--- a/src/3d/scene_loader.cc
+++ b/src/3d/scene_loader.cc
@@ -1,13 +1,13 @@
#include "3d/scene_loader.h"
#include "generated/assets.h"
+#include "plane_data.h"
#include "util/asset_manager.h"
#include "util/mini_math.h"
#include <cstdio>
#include <cstring>
-#include <vector>
#include <memory> // For std::shared_ptr
#include <new> // For std::nothrow
-#include "plane_data.h"
+#include <vector>
bool SceneLoader::LoadScene(Scene& scene, const uint8_t* data, size_t size) {
if (!data || size < 16) { // Header size check
@@ -77,18 +77,23 @@ bool SceneLoader::LoadScene(Scene& scene, const uint8_t* data, size_t size) {
vec3 scale(sx, sy, sz);
// Color components (cr, cg, cb, ca)
- float cr = *reinterpret_cast<const float*>(data + offset); offset += 4;
- float cg = *reinterpret_cast<const float*>(data + offset); offset += 4;
- float cb = *reinterpret_cast<const float*>(data + offset); offset += 4;
+ float cr = *reinterpret_cast<const float*>(data + offset);
+ offset += 4;
+ float cg = *reinterpret_cast<const float*>(data + offset);
+ offset += 4;
+ float cb = *reinterpret_cast<const float*>(data + offset);
+ offset += 4;
// Read ca, advance offset AFTER reading ca, then construct color
- float ca = *reinterpret_cast<const float*>(data + offset); offset += 4; // Offset is now after ca
+ float ca = *reinterpret_cast<const float*>(data + offset);
+ offset += 4; // Offset is now after ca
vec4 color(cr, cg, cb, ca);
// Plane Distance (if type == PLANE)
float plane_distance = 0.0f;
if (type == ObjectType::PLANE) {
// Check bounds before reading plane_distance
- if (offset + 4 > size) return false;
+ if (offset + 4 > size)
+ return false;
plane_distance = *reinterpret_cast<const float*>(data + offset);
offset += 4; // Advance offset after reading plane_distance
}
@@ -96,7 +101,8 @@ bool SceneLoader::LoadScene(Scene& scene, const uint8_t* data, size_t size) {
// Mesh Asset Name Length
// The offset is now correctly positioned for name_len,
// either after ca (if not PLANE) or after plane_distance (if PLANE).
- if (offset + 4 > size) return false;
+ if (offset + 4 > size)
+ return false;
uint32_t name_len = *reinterpret_cast<const uint32_t*>(data + offset);
offset += 4;
@@ -145,12 +151,14 @@ bool SceneLoader::LoadScene(Scene& scene, const uint8_t* data, size_t size) {
// Store plane distance in shared_user_data if it's a plane
if (type == ObjectType::PLANE) {
- // Allocate PlaneData on the heap and manage with shared_ptr
- // Use std::make_shared for exception safety and efficiency
- obj.shared_user_data = std::make_shared<PlaneData>();
- // Assign the plane distance
- // Safely cast void* to PlaneData* using static_cast on the shared_ptr's get()
- static_cast<PlaneData*>(obj.shared_user_data.get())->distance = plane_distance;
+ // Allocate PlaneData on the heap and manage with shared_ptr
+ // Use std::make_shared for exception safety and efficiency
+ obj.shared_user_data = std::make_shared<PlaneData>();
+ // Assign the plane distance
+ // Safely cast void* to PlaneData* using static_cast on the shared_ptr's
+ // get()
+ static_cast<PlaneData*>(obj.shared_user_data.get())->distance =
+ plane_distance;
}
// Add to scene