summaryrefslogtreecommitdiff
path: root/include/render_assets.h
diff options
context:
space:
mode:
authorChuyan Zhang <chuyan@ucsb.edu>2024-10-10 18:51:05 -0700
committerChuyan Zhang <chuyan@ucsb.edu>2024-10-10 18:51:05 -0700
commit6271f5ce797bf12be64c710b66b1b9e93a239829 (patch)
tree44cc6a5ab5a20f7e55829f18b68a9f1191dac81d /include/render_assets.h
parentba27f3c22e79b91a2573b7efd00c5a3bbdb96dbc (diff)
downloadiris-6271f5ce797bf12be64c710b66b1b9e93a239829.tar.gz
iris-6271f5ce797bf12be64c710b66b1b9e93a239829.zip
move to new resource abstractionHEADmain
Diffstat (limited to 'include/render_assets.h')
-rw-r--r--include/render_assets.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/include/render_assets.h b/include/render_assets.h
new file mode 100644
index 0000000..1819271
--- /dev/null
+++ b/include/render_assets.h
@@ -0,0 +1,94 @@
+#pragma once
+
+#include <cstdint>
+#include <string>
+#include <vector>
+#include <glm/glm.hpp>
+
+namespace iris {
+
+struct Mesh {
+ std::string name;
+ std::vector<glm::vec3> vertices;
+ std::vector<glm::vec3> normals;
+ std::vector<glm::vec2> texcoords;
+ // Note: w component is a sign, 1.0 or -1.0
+ std::vector<glm::vec4> tangents;
+ std::vector<uint32_t> indices;
+ int32_t material_index;
+
+ // AABB
+ glm::vec3 p_min;
+ glm::vec3 p_max;
+};
+
+struct Material {
+ std::string name;
+ glm::vec4 base_color;
+ float metallic;
+ float roughness;
+
+ int32_t base_color_texture;
+ int32_t metallic_roughness_texture;
+ int32_t normal_texture;
+ int32_t occulsion_texture;
+ int32_t emissive_texture;
+};
+
+
+struct Image {
+ std::vector<uint8_t> data;
+ glm::uvec3 extent;
+ int32_t bits_per_channel;
+};
+
+struct Sampler2D {
+ int32_t min_filter;
+ int32_t mag_filter;
+ int32_t wrap_s;
+ int32_t wrap_t;
+};
+
+struct Texture {
+ std::string name;
+ Image image;
+ Sampler2D sampler;
+};
+
+struct Camera {
+ enum struct Tag {
+ Perspective,
+ Orthographic,
+ } intrinsic_tag;
+ struct PerspectiveCamera {
+ float fovx;
+ float fovy;
+ float aspect;
+ float znear;
+ float zfar;
+ };
+
+ struct OrthographicCamera {
+ float xmag;
+ float ymag;
+ float znear;
+ float zfar;
+ };
+ union {
+ PerspectiveCamera perspective;
+ OrthographicCamera orthographic;
+ } intrinsic;
+ glm::vec3 position;
+ glm::vec3 direction;
+ glm::vec3 up;
+};
+
+struct Scene {
+ std::vector<Mesh> meshes;
+ std::vector<Material> materials;
+ std::vector<Texture> textures;
+
+ Camera camera;
+};
+
+} // namespace iris \ No newline at end of file