From e8aea009c6af403294b756ec1dc67ea36fe9be3f Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Sun, 31 Dec 2023 20:19:41 +0800 Subject: [PATCH] example: add heart I originally planned to make this a render-to-texture demo, but this is fairly interesting by itself. --- common.mk | 2 +- example/example.mk | 11 ++ example/heart.cpp | 333 ++++++++++++++++++++++++++++++++++++++++++ geometry/geometry.hpp | 14 +- geometry/heart.blend | Bin 0 -> 882636 bytes geometry/heart.hpp | 247 +++++++++++++++++++++++++++++++ geometry/heart.obj | 234 +++++++++++++++++++++++++++++ holly/core_bits.hpp | 8 +- math/vec4.hpp | 6 + tools/obj_to_cpp.py | 101 ++++++++++--- 10 files changed, 932 insertions(+), 24 deletions(-) create mode 100644 example/heart.cpp create mode 100644 geometry/heart.blend create mode 100644 geometry/heart.hpp create mode 100644 geometry/heart.obj diff --git a/common.mk b/common.mk index d2b1975..25146ff 100644 --- a/common.mk +++ b/common.mk @@ -2,7 +2,7 @@ MAKEFILE_PATH := $(abspath $(lastword $(MAKEFILE_LIST))) DIR := $(dir $(MAKEFILE_PATH)) LIB ?= . -OPT ?= -O3 +OPT ?= -O2 DEBUG ?= -g -gdwarf-4 GENERATED ?= diff --git a/example/example.mk b/example/example.mk index 2b8c7c1..332b821 100644 --- a/example/example.mk +++ b/example/example.mk @@ -152,6 +152,17 @@ MODIFIER_VOLUME_WITH_TWO_VOLUMES_OBJ = \ maple/maple.o \ $(LIBGCC) +HEART_OBJ = \ + example/heart.o \ + vga.o \ + holly/core.o \ + holly/region_array.o \ + holly/background.o \ + holly/ta_fifo_polygon_converter.o + +example/heart.elf: LDSCRIPT = $(LIB)/alt.lds +example/heart.elf: $(START_OBJ) $(HEART_OBJ) + example/modifier_volume_with_two_volumes.elf: LDSCRIPT = $(LIB)/alt.lds example/modifier_volume_with_two_volumes.elf: $(START_OBJ) $(MODIFIER_VOLUME_WITH_TWO_VOLUMES_OBJ) diff --git a/example/heart.cpp b/example/heart.cpp new file mode 100644 index 0000000..22c33e5 --- /dev/null +++ b/example/heart.cpp @@ -0,0 +1,333 @@ +#include + +#include "align.hpp" +#include "vga.hpp" + +#include "holly/texture_memory_alloc.hpp" +#include "holly.hpp" +#include "holly/core.hpp" +#include "holly/core_bits.hpp" +#include "holly/ta_fifo_polygon_converter.hpp" +#include "holly/ta_parameter.hpp" +#include "holly/ta_global_parameter.hpp" +#include "holly/ta_vertex_parameter.hpp" +#include "holly/ta_bits.hpp" +#include "holly/region_array.hpp" +#include "holly/background.hpp" +#include "holly/isp_tsp.hpp" +#include "memorymap.hpp" + +#include "geometry/heart.hpp" +#include "math/vec3.hpp" +#include "math/vec4.hpp" +#include "math/mat4x4.hpp" + +using mat4x4 = mat<4, 4, float>; + +constexpr float pi = 3.141592653589793; + +struct rotation_weights { + float drx; + float dry; + float drz; +}; + +// randomly generated numbers +constexpr rotation_weights weights[16] = { + {-0.8154296875, 0.8583984375, -0.498046875}, + {0.322265625, 0.6796875, 0.3251953125}, + {-0.2626953125, -0.7744140625, 0.37109375}, + {0.5830078125, 0.42578125, 0.5546875}, + {0.9140625, 0.7568359375, -0.037109375}, + {0.8974609375, 0.103515625, -0.2666015625}, + {0.8427734375, -0.4091796875, -0.365234375}, + {0.162109375, -0.603515625, 0.4248046875}, + {-0.47265625, -0.73828125, -0.4912109375}, + {-0.921875, 0.4609375, 0.2216796875}, + {0.400390625, -0.5634765625, -0.3232421875}, + {0.896484375, 0.26953125, -0.951171875}, + {0.541015625, 0.90625, 0.640625}, + {0.5927734375, -0.361328125, 0.21875}, + {-0.9267578125, -0.9423828125, 0.4580078125}, + {0.16796875, 0.3662109375, 0.603515625}, +}; + +// randomly generated numbers +float lighting_weights[16] = { + 0.7314453125, + 0.44921875, + 0.259765625, + 0.3232421875, + 0.1015625, + 0.2529296875, + 0.8662109375, + 0.5439453125, + 0.1337890625, + 0.041015625, + 0.6298828125, + 0.30859375, + 0.517578125, + 0.6259765625, + 0.283203125, + 0.982421875, +}; + +struct model_transform { + float x; + float y; + float z; + float rx; + float ry; + float rz; + + model_transform() + : x(0.f) + , y(0.f) + , z(0.f) + , rx(0.f) + , ry(0.f) + , rz(0.f) + { } +}; + +struct model_transform models[] = { +}; + +inline mat4x4 rotate_x(float t) +{ + return mat4x4(1.f, 0.f, 0.f, 0.f, + 0.f, cos(t), -sin(t), 0.f, + 0.f, sin(t), cos(t), 0.f, + 0.f, 0.f, 0.f, 1.f + ); +} + +inline mat4x4 rotate_y(float t) +{ + return mat4x4( cos(t), 0.f, sin(t), 0.f, + 0.f, 1.f, 0.f, 0.f, + -sin(t), 0.f, cos(t), 0.f, + 0.f, 0.f, 0.f, 1.f + ); +} + +inline mat4x4 rotate_z(float t) +{ + return mat4x4(cos(t), -sin(t), 0.f, 0.f, + sin(t), cos(t), 0.f, 0.f, + 0.f, 0.f, 1.f, 0.f, + 0.f, 0.f, 0.f, 1.f + ); +} + +inline mat4x4 translate(float x, float y, float z) +{ + return mat4x4(1.f, 0.f, 0.f, x, + 0.f, 1.f, 0.f, y, + 0.f, 0.f, 1.f, z, + 0.f, 0.f, 0.f, 1.f + ); +} + +vec3 _transform(const vec4& point) +{ + float x = point.x; + float y = point.y; + float z = point.z; + + // camera transform + z += 4; + + // perspective + x = x / z; + y = y / z; + + // screen space transform + x *= 240.f; + y *= 240.f; + x += 320.f; + y += 240.f; + z = 1 / z; + + return {x, y, z}; +} + +void transform_model(ta_parameter_writer& parameter, + const position__color * vertices, + const vec3 * normals, + const face_vn * faces, + const uint32_t num_faces, + const model_transform& mt, + const float lighting_weight) +{ + const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume + | para_control::list_type::opaque + | obj_control::col_type::floating_color + | obj_control::gouraud; + + const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::greater + | isp_tsp_instruction_word::culling_mode::no_culling; + + const uint32_t tsp_instruction_word = tsp_instruction_word::src_alpha_instr::one + | tsp_instruction_word::dst_alpha_instr::zero + | tsp_instruction_word::fog_control::no_fog; + + const mat4x4 mat = translate(mt.x, mt.y, mt.z) * rotate_z(mt.rz) * rotate_y(mt.ry) * rotate_x(mt.rx); + + constexpr uint32_t strip_length = 3; + for (uint32_t face_ix = 0; face_ix < num_faces; face_ix++) { + + parameter.append() = + ta_global_parameter::polygon_type_0(parameter_control_word, + isp_tsp_instruction_word, + tsp_instruction_word, + 0, // texture_control_word + 0, // data_size_for_sort_dma + 0 // next_address_for_sort_dma + ); + + auto& face = faces[face_ix]; + for (uint32_t i = 0; i < strip_length; i++) { + // world transform + uint32_t vertex_ix = face[i].vertex; + auto& vertex = vertices[vertex_ix].position; + auto& color = vertices[vertex_ix].color; + auto point = mat * vec4(vertex); + + uint32_t normal_ix = face[i].normal; + auto& normal = normals[normal_ix]; + auto n = mat * vec4(normal); + + vec4 light = {0.f, 0.f, 40.f, 1.f}; + auto l = light - point; + auto n_dot_l = dot(n, l); + vec3 c(0.f, 0.f, 0.f); + c.r += color.r * 0.1; + c.g += color.g * 0.1; + c.b += color.b * 0.1; + if (n_dot_l > 0) { + float intensity = n_dot_l / (length(n) * length(l)); + c.r += color.r * intensity * lighting_weight; + c.g += color.g * intensity * lighting_weight; + c.b += color.b * intensity * lighting_weight; + } + + auto screen = _transform(point); + + bool end_of_strip = i == strip_length - 1; + parameter.append() = + ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(end_of_strip), + screen.x, + screen.y, + screen.z, + 1.0f, // alpha + c.r, // red + c.g, // green + c.b // blue + ); + } + } +} + +void init_texture_memory(const struct opb_size& opb_size) +{ + auto mem = reinterpret_cast(texture_memory32); + + background_parameter(mem->background, 0xff220000); + holly.VO_BORDER_COL = 0x00220000; + + region_array2(mem->region_array, + (offsetof (struct texture_memory_alloc, object_list)), + 640 / 32, // width + 480 / 32, // height + opb_size + ); +} + +uint32_t _ta_parameter_buf[((32 * 8192) + 32) / 4]; + +void main() +{ + vga(); + + // The address of `ta_parameter_buf` must be a multiple of 32 bytes. + // This is mandatory for ch2-dma to the ta fifo polygon converter. + uint32_t * ta_parameter_buf = align_32byte(_ta_parameter_buf); + + constexpr uint32_t ta_alloc = ta_alloc_ctrl::pt_opb::no_list + | ta_alloc_ctrl::tm_opb::no_list + | ta_alloc_ctrl::t_opb::no_list + | ta_alloc_ctrl::om_opb::no_list + | ta_alloc_ctrl::o_opb::_16x4byte; + + constexpr struct opb_size opb_size = { .opaque = 16 * 4 + , .opaque_modifier = 0 + , .translucent = 0 + , .translucent_modifier = 0 + , .punch_through = 0 + }; + + holly.SOFTRESET = softreset::pipeline_soft_reset + | softreset::ta_soft_reset; + holly.SOFTRESET = 0; + + core_init(); + init_texture_memory(opb_size); + + uint32_t frame_ix = 0; + constexpr uint32_t num_frames = 1; + + float theta = 0; + + model_transform mt[16] = {}; + for (int x = 0; x < 4; x++) { + for (int y = 0; y < 4; y++) { + int ix = y * 4 + x; + mt[ix].x = -8.f + 5.f * static_cast(x); + mt[ix].y = -7.5f + 5.f * static_cast(y); + mt[ix].z = 6.f; + mt[ix].rx = (-8.f + static_cast(ix)) * -pi / 16; + mt[ix].ry = (-8.f + static_cast(ix)) * ix * -pi / 16; + mt[ix].rz = (-8.f + static_cast(ix)) * ix * -pi / 16; + } + } + + while (true) { + ta_polygon_converter_init(opb_size.total(), + ta_alloc, + 640 / 32, + 480 / 32); + auto parameter = ta_parameter_writer(ta_parameter_buf); + { // plane + for (uint32_t i = 0; i < 16; i++) { + transform_model(parameter, + heart::vertices, + heart::normals, + heart::faces, + heart::num_faces, + mt[i], + (1.f + sin(theta * 2 * lighting_weights[i])) * 0.5f); + + // update model + auto& weight = weights[i]; + mt[i].rx += weight.drx / 50.f; + mt[i].ry += weight.dry / 50.f; + mt[i].rz += weight.drz / 50.f; + } + } + // end of opaque list + parameter.append() = ta_global_parameter::end_of_list(para_control::para_type::end_of_list); + + ta_polygon_converter_transfer(ta_parameter_buf, parameter.offset); + ta_wait_opaque_list(); + + core_start_render(frame_ix, num_frames); + + v_sync_in(); + core_wait_end_of_render_video(frame_ix, num_frames); + + constexpr float half_degree = 0.01745329f / 2; + theta += half_degree; + frame_ix += 1; + } +} diff --git a/geometry/geometry.hpp b/geometry/geometry.hpp index cd865a5..25f89da 100644 --- a/geometry/geometry.hpp +++ b/geometry/geometry.hpp @@ -16,4 +16,16 @@ struct vertex__texture__normal { uint16_t normal; }; -using face = vertex__texture__normal[3]; +struct vertex__normal { + uint16_t vertex; + uint16_t normal; +}; + +struct position__color { + vec3 position; + vec3 color; +}; + +using face_vtn = vertex__texture__normal[3]; + +using face_vn = vertex__normal[3]; diff --git a/geometry/heart.blend b/geometry/heart.blend new file mode 100644 index 0000000000000000000000000000000000000000..f5d2fc3a0f914557969106ef209b70371da44691 GIT binary patch literal 882636 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 Djd%(} literal 0 HcmV?d00001 diff --git a/geometry/heart.hpp b/geometry/heart.hpp new file mode 100644 index 0000000..d5f9bc8 --- /dev/null +++ b/geometry/heart.hpp @@ -0,0 +1,247 @@ +#pragma once + +#include "geometry.hpp" + +namespace heart { + constexpr position__color vertices[] = { + { { 0.000000f, 0.400000f, -0.707107f}, { 1.000000f, 0.611800f, 0.211800f} }, + { { 0.144430f, -0.400000f, -0.831470f}, { 1.000000f, 0.000000f, 0.674500f} }, + { { 0.144430f, 0.400000f, -0.831470f}, { 1.000000f, 0.611800f, 0.215700f} }, + { { 0.317317f, -0.400000f, -0.923880f}, { 1.000000f, 0.000000f, 0.670600f} }, + { { 0.317317f, 0.400000f, -0.923880f}, { 1.000000f, 0.611800f, 0.211800f} }, + { { 0.504910f, -0.400000f, -0.980785f}, { 1.000000f, 0.011800f, 0.670600f} }, + { { 0.504910f, 0.400000f, -0.980785f}, { 1.000000f, 0.611800f, 0.211800f} }, + { { 0.700000f, -0.400000f, -1.000000f}, { 1.000000f, 0.000000f, 0.670600f} }, + { { 0.700000f, 0.400000f, -1.000000f}, { 1.000000f, 0.611800f, 0.211800f} }, + { { 0.895090f, -0.400000f, -0.980785f}, { 1.000000f, 0.000000f, 0.898000f} }, + { { 0.895090f, 0.400000f, -0.980785f}, { 1.000000f, 0.235300f, 0.843100f} }, + { { 1.082684f, -0.400000f, -0.923879f}, { 1.000000f, 0.023500f, 0.909800f} }, + { { 1.082684f, 0.400000f, -0.923879f}, { 1.000000f, 0.611800f, 0.211800f} }, + { { 1.255570f, -0.400000f, -0.831469f}, { 1.000000f, 0.329400f, 0.866600f} }, + { { 1.255570f, 0.400000f, -0.831469f}, { 1.000000f, 0.615700f, 0.219600f} }, + { { 1.407107f, -0.400000f, -0.707107f}, { 1.000000f, 0.282300f, 0.886200f} }, + { { 1.407107f, 0.400000f, -0.707107f}, { 1.000000f, 0.580400f, 0.384300f} }, + { { 1.531470f, -0.400000f, -0.555570f}, { 1.000000f, 0.282300f, 0.886200f} }, + { { 1.531470f, 0.400000f, -0.555570f}, { 1.000000f, 0.051000f, 0.600000f} }, + { { 1.623880f, -0.400000f, -0.382683f}, { 1.000000f, 0.282300f, 0.886200f} }, + { { 1.623880f, 0.400000f, -0.382683f}, { 1.000000f, 0.051000f, 0.603900f} }, + { { 1.680785f, -0.400000f, -0.195090f}, { 1.000000f, 0.615700f, 0.674500f} }, + { { 1.680785f, 0.400000f, -0.195090f}, { 1.000000f, 0.035300f, 0.776400f} }, + { { 1.700000f, -0.400000f, 0.000000f}, { 1.000000f, 0.623600f, 0.666700f} }, + { { 1.700000f, 0.400000f, 0.000000f}, { 0.988200f, 0.003900f, 0.996000f} }, + { { 1.680785f, -0.400000f, 0.195090f}, { 1.000000f, 0.000000f, 0.909800f} }, + { { 1.680785f, 0.400000f, 0.195090f}, { 0.843100f, 0.011800f, 0.956800f} }, + { { 1.623879f, -0.400000f, 0.382684f}, { 1.000000f, 0.011800f, 0.909800f} }, + { { 1.623879f, 0.400000f, 0.382684f}, { 0.611800f, 0.239200f, 0.976400f} }, + { { 1.531470f, -0.400000f, 0.555570f}, { 1.000000f, 0.643200f, 0.619700f} }, + { { 1.531470f, 0.400000f, 0.555570f}, { 0.611800f, 0.231400f, 0.976400f} }, + { { 1.407107f, 0.400000f, 0.707107f}, { 0.572500f, 0.235300f, 0.976400f} }, + { { 0.000000f, -0.400000f, -0.707107f}, { 1.000000f, 0.000000f, 0.670600f} }, + { {-0.000000f, 0.400000f, 2.121320f}, { 0.000000f, 0.807800f, 1.000000f} }, + { {-0.000000f, -0.400000f, 2.121320f}, { 1.000000f, 0.921500f, 0.000000f} }, + { { 1.407107f, -0.400000f, 0.707107f}, { 1.000000f, 0.780400f, 0.415700f} }, + { {-0.144430f, -0.400000f, -0.831470f}, { 0.901900f, 0.439200f, 0.603900f} }, + { {-0.144430f, 0.400000f, -0.831470f}, { 1.000000f, 0.611800f, 0.211800f} }, + { {-0.317317f, -0.400000f, -0.923880f}, { 0.670600f, 0.745100f, 0.603900f} }, + { {-0.317317f, 0.400000f, -0.923880f}, { 1.000000f, 0.607900f, 0.235300f} }, + { {-0.504910f, -0.400000f, -0.980785f}, { 0.235300f, 0.976400f, 0.196100f} }, + { {-0.504910f, 0.400000f, -0.980785f}, { 1.000000f, 0.047100f, 0.913700f} }, + { {-0.700000f, -0.400000f, -1.000000f}, { 0.403900f, 0.917600f, 0.360800f} }, + { {-0.700000f, 0.400000f, -1.000000f}, { 1.000000f, 0.000000f, 0.909800f} }, + { {-0.895090f, -0.400000f, -0.980785f}, { 0.403900f, 0.917600f, 0.360800f} }, + { {-0.895090f, 0.400000f, -0.980785f}, { 1.000000f, 0.000000f, 0.909800f} }, + { {-1.082683f, -0.400000f, -0.923880f}, { 0.262700f, 0.968600f, 0.223500f} }, + { {-1.082683f, 0.400000f, -0.923880f}, { 1.000000f, 0.117600f, 0.956800f} }, + { {-1.255570f, -0.400000f, -0.831470f}, { 0.560800f, 0.831300f, 0.505900f} }, + { {-1.255570f, 0.400000f, -0.831470f}, { 1.000000f, 0.000000f, 0.956800f} }, + { {-1.407107f, -0.400000f, -0.707107f}, { 0.776400f, 0.996000f, 0.090200f} }, + { {-1.407107f, 0.400000f, -0.707107f}, { 1.000000f, 0.117600f, 0.956800f} }, + { {-1.531470f, -0.400000f, -0.555570f}, { 0.878400f, 0.941100f, 0.305900f} }, + { {-1.531470f, 0.400000f, -0.555570f}, { 1.000000f, 0.000000f, 0.956800f} }, + { {-1.623880f, -0.400000f, -0.382683f}, { 0.882300f, 0.933300f, 0.325500f} }, + { {-1.623880f, 0.400000f, -0.382683f}, { 0.984300f, 1.000000f, 0.019600f} }, + { {-1.680785f, -0.400000f, -0.195090f}, { 0.745100f, 0.878400f, 0.458900f} }, + { {-1.680785f, 0.400000f, -0.195090f}, { 0.698000f, 0.741200f, 0.639300f} }, + { {-1.700000f, -0.400000f, -0.000000f}, { 0.219600f, 0.768600f, 0.639300f} }, + { {-1.700000f, 0.400000f, -0.000000f}, { 0.254900f, 1.000000f, 0.003900f} }, + { {-1.680785f, -0.400000f, 0.195090f}, { 0.051000f, 0.203900f, 0.980400f} }, + { {-1.680785f, 0.400000f, 0.195090f}, { 0.251000f, 1.000000f, 0.003900f} }, + { {-1.623879f, -0.400000f, 0.382683f}, { 0.054900f, 0.223500f, 0.976400f} }, + { {-1.623879f, 0.400000f, 0.382683f}, { 0.251000f, 1.000000f, 0.003900f} }, + { {-1.531470f, -0.400000f, 0.555570f}, { 0.098000f, 0.423500f, 0.901900f} }, + { {-1.531470f, 0.400000f, 0.555570f}, { 0.251000f, 1.000000f, 0.003900f} }, + { {-1.407107f, 0.400000f, 0.707107f}, { 0.254900f, 1.000000f, 0.007800f} }, + { {-1.407107f, -0.400000f, 0.707107f}, { 0.105900f, 0.203900f, 0.980400f} }, + }; + + constexpr vec3 normals[] = { + { -0.652500f, -0.000000f, -0.757800f }, + { -0.471400f, -0.000000f, -0.881900f }, + { -0.290300f, -0.000000f, -0.956900f }, + { -0.098000f, -0.000000f, -0.995200f }, + { 0.098000f, -0.000000f, -0.995200f }, + { 0.290300f, -0.000000f, -0.956900f }, + { 0.471400f, -0.000000f, -0.881900f }, + { 0.634400f, -0.000000f, -0.773000f }, + { 0.773000f, -0.000000f, -0.634400f }, + { 0.881900f, -0.000000f, -0.471400f }, + { 0.956900f, -0.000000f, -0.290300f }, + { 0.995200f, -0.000000f, -0.098000f }, + { 0.995200f, -0.000000f, 0.098000f }, + { 0.956900f, -0.000000f, 0.290300f }, + { 0.881900f, -0.000000f, 0.471400f }, + { 0.773000f, -0.000000f, 0.634400f }, + { -0.000000f, 1.000000f, -0.000000f }, + { -0.000000f, -1.000000f, -0.000000f }, + { 0.708900f, -0.000000f, 0.705300f }, + { 0.652500f, -0.000000f, -0.757800f }, + { -0.634400f, -0.000000f, -0.773000f }, + { -0.773000f, -0.000000f, -0.634400f }, + { -0.881900f, -0.000000f, -0.471400f }, + { -0.956900f, -0.000000f, -0.290300f }, + { -0.995200f, -0.000000f, -0.098000f }, + { -0.995200f, -0.000000f, 0.098000f }, + { -0.956900f, -0.000000f, 0.290300f }, + { -0.881900f, -0.000000f, 0.471400f }, + { -0.773000f, -0.000000f, 0.634400f }, + { -0.708900f, -0.000000f, 0.705300f }, + }; + + constexpr face_vn faces[] = { + {{ 0, 0}, { 1, 0}, {32, 0}}, + {{ 2, 1}, { 3, 1}, { 1, 1}}, + {{ 4, 2}, { 5, 2}, { 3, 2}}, + {{ 6, 3}, { 7, 3}, { 5, 3}}, + {{ 8, 4}, { 9, 4}, { 7, 4}}, + {{10, 5}, {11, 5}, { 9, 5}}, + {{12, 6}, {13, 6}, {11, 6}}, + {{14, 7}, {15, 7}, {13, 7}}, + {{16, 8}, {17, 8}, {15, 8}}, + {{18, 9}, {19, 9}, {17, 9}}, + {{20, 10}, {21, 10}, {19, 10}}, + {{22, 11}, {23, 11}, {21, 11}}, + {{24, 12}, {25, 12}, {23, 12}}, + {{26, 13}, {27, 13}, {25, 13}}, + {{28, 14}, {29, 14}, {27, 14}}, + {{30, 15}, {35, 15}, {29, 15}}, + {{ 0, 16}, {18, 16}, {10, 16}}, + {{ 1, 17}, {17, 17}, {25, 17}}, + {{31, 18}, {34, 18}, {35, 18}}, + {{35, 17}, {34, 17}, {32, 17}}, + {{33, 16}, {31, 16}, { 0, 16}}, + {{36, 19}, { 0, 19}, {32, 19}}, + {{38, 6}, {37, 6}, {36, 6}}, + {{40, 5}, {39, 5}, {38, 5}}, + {{42, 4}, {41, 4}, {40, 4}}, + {{44, 3}, {43, 3}, {42, 3}}, + {{46, 2}, {45, 2}, {44, 2}}, + {{48, 1}, {47, 1}, {46, 1}}, + {{50, 20}, {49, 20}, {48, 20}}, + {{52, 21}, {51, 21}, {50, 21}}, + {{54, 22}, {53, 22}, {52, 22}}, + {{56, 23}, {55, 23}, {54, 23}}, + {{58, 24}, {57, 24}, {56, 24}}, + {{60, 25}, {59, 25}, {58, 25}}, + {{62, 26}, {61, 26}, {60, 26}}, + {{64, 27}, {63, 27}, {62, 27}}, + {{67, 28}, {65, 28}, {64, 28}}, + {{39, 16}, {55, 16}, {63, 16}}, + {{67, 17}, {50, 17}, {42, 17}}, + {{34, 29}, {66, 29}, {67, 29}}, + {{67, 17}, {32, 17}, {34, 17}}, + {{33, 16}, { 0, 16}, {66, 16}}, + {{ 0, 0}, { 2, 0}, { 1, 0}}, + {{ 2, 1}, { 4, 1}, { 3, 1}}, + {{ 4, 2}, { 6, 2}, { 5, 2}}, + {{ 6, 3}, { 8, 3}, { 7, 3}}, + {{ 8, 4}, {10, 4}, { 9, 4}}, + {{10, 5}, {12, 5}, {11, 5}}, + {{12, 6}, {14, 6}, {13, 6}}, + {{14, 7}, {16, 7}, {15, 7}}, + {{16, 8}, {18, 8}, {17, 8}}, + {{18, 9}, {20, 9}, {19, 9}}, + {{20, 10}, {22, 10}, {21, 10}}, + {{22, 11}, {24, 11}, {23, 11}}, + {{24, 12}, {26, 12}, {25, 12}}, + {{26, 13}, {28, 13}, {27, 13}}, + {{28, 14}, {30, 14}, {29, 14}}, + {{30, 15}, {31, 15}, {35, 15}}, + {{ 4, 16}, { 2, 16}, { 0, 16}}, + {{ 0, 16}, {31, 16}, {30, 16}}, + {{30, 16}, {28, 16}, {26, 16}}, + {{26, 16}, {24, 16}, {22, 16}}, + {{22, 16}, {20, 16}, {18, 16}}, + {{18, 16}, {16, 16}, {14, 16}}, + {{14, 16}, {12, 16}, {10, 16}}, + {{10, 16}, { 8, 16}, { 6, 16}}, + {{ 6, 16}, { 4, 16}, { 0, 16}}, + {{ 0, 16}, {30, 16}, {26, 16}}, + {{26, 16}, {22, 16}, {18, 16}}, + {{18, 16}, {14, 16}, {10, 16}}, + {{10, 16}, { 6, 16}, { 0, 16}}, + {{ 0, 16}, {26, 16}, {18, 16}}, + {{35, 17}, {32, 17}, { 1, 17}}, + {{ 1, 17}, { 3, 17}, { 5, 17}}, + {{ 5, 17}, { 7, 17}, { 9, 17}}, + {{ 9, 17}, {11, 17}, {13, 17}}, + {{13, 17}, {15, 17}, {17, 17}}, + {{17, 17}, {19, 17}, {21, 17}}, + {{21, 17}, {23, 17}, {25, 17}}, + {{25, 17}, {27, 17}, {29, 17}}, + {{29, 17}, {35, 17}, { 1, 17}}, + {{ 1, 17}, { 5, 17}, { 9, 17}}, + {{ 9, 17}, {13, 17}, {17, 17}}, + {{17, 17}, {21, 17}, {25, 17}}, + {{25, 17}, {29, 17}, { 1, 17}}, + {{ 1, 17}, { 9, 17}, {17, 17}}, + {{31, 18}, {33, 18}, {34, 18}}, + {{36, 19}, {37, 19}, { 0, 19}}, + {{38, 6}, {39, 6}, {37, 6}}, + {{40, 5}, {41, 5}, {39, 5}}, + {{42, 4}, {43, 4}, {41, 4}}, + {{44, 3}, {45, 3}, {43, 3}}, + {{46, 2}, {47, 2}, {45, 2}}, + {{48, 1}, {49, 1}, {47, 1}}, + {{50, 20}, {51, 20}, {49, 20}}, + {{52, 21}, {53, 21}, {51, 21}}, + {{54, 22}, {55, 22}, {53, 22}}, + {{56, 23}, {57, 23}, {55, 23}}, + {{58, 24}, {59, 24}, {57, 24}}, + {{60, 25}, {61, 25}, {59, 25}}, + {{62, 26}, {63, 26}, {61, 26}}, + {{64, 27}, {65, 27}, {63, 27}}, + {{67, 28}, {66, 28}, {65, 28}}, + {{ 0, 16}, {37, 16}, {39, 16}}, + {{39, 16}, {41, 16}, {43, 16}}, + {{43, 16}, {45, 16}, {47, 16}}, + {{47, 16}, {49, 16}, {51, 16}}, + {{51, 16}, {53, 16}, {55, 16}}, + {{55, 16}, {57, 16}, {59, 16}}, + {{59, 16}, {61, 16}, {63, 16}}, + {{63, 16}, {65, 16}, {66, 16}}, + {{66, 16}, { 0, 16}, {39, 16}}, + {{39, 16}, {43, 16}, {47, 16}}, + {{47, 16}, {51, 16}, {55, 16}}, + {{55, 16}, {59, 16}, {63, 16}}, + {{63, 16}, {66, 16}, {39, 16}}, + {{39, 16}, {47, 16}, {55, 16}}, + {{36, 17}, {32, 17}, {67, 17}}, + {{67, 17}, {64, 17}, {62, 17}}, + {{62, 17}, {60, 17}, {58, 17}}, + {{58, 17}, {56, 17}, {54, 17}}, + {{54, 17}, {52, 17}, {50, 17}}, + {{50, 17}, {48, 17}, {46, 17}}, + {{46, 17}, {44, 17}, {42, 17}}, + {{42, 17}, {40, 17}, {38, 17}}, + {{38, 17}, {36, 17}, {67, 17}}, + {{67, 17}, {62, 17}, {58, 17}}, + {{58, 17}, {54, 17}, {50, 17}}, + {{50, 17}, {46, 17}, {42, 17}}, + {{42, 17}, {38, 17}, {67, 17}}, + {{67, 17}, {58, 17}, {50, 17}}, + {{34, 29}, {33, 29}, {66, 29}}, + }; + + constexpr uint32_t num_faces = (sizeof (faces)) / (sizeof (face_vn)); + +} diff --git a/geometry/heart.obj b/geometry/heart.obj new file mode 100644 index 0000000..6dbc837 --- /dev/null +++ b/geometry/heart.obj @@ -0,0 +1,234 @@ +# Blender 3.3.6 +# www.blender.org +o Heart +v 0.000000 0.400000 -0.707107 1.0000 0.6118 0.2118 +v 0.144430 -0.400000 -0.831470 1.0000 0.0000 0.6745 +v 0.144430 0.400000 -0.831470 1.0000 0.6118 0.2157 +v 0.317317 -0.400000 -0.923880 1.0000 0.0000 0.6706 +v 0.317317 0.400000 -0.923880 1.0000 0.6118 0.2118 +v 0.504910 -0.400000 -0.980785 1.0000 0.0118 0.6706 +v 0.504910 0.400000 -0.980785 1.0000 0.6118 0.2118 +v 0.700000 -0.400000 -1.000000 1.0000 0.0000 0.6706 +v 0.700000 0.400000 -1.000000 1.0000 0.6118 0.2118 +v 0.895090 -0.400000 -0.980785 1.0000 0.0000 0.8980 +v 0.895090 0.400000 -0.980785 1.0000 0.2353 0.8431 +v 1.082684 -0.400000 -0.923879 1.0000 0.0235 0.9098 +v 1.082684 0.400000 -0.923879 1.0000 0.6118 0.2118 +v 1.255570 -0.400000 -0.831469 1.0000 0.3294 0.8666 +v 1.255570 0.400000 -0.831469 1.0000 0.6157 0.2196 +v 1.407107 -0.400000 -0.707107 1.0000 0.2823 0.8862 +v 1.407107 0.400000 -0.707107 1.0000 0.5804 0.3843 +v 1.531470 -0.400000 -0.555570 1.0000 0.2823 0.8862 +v 1.531470 0.400000 -0.555570 1.0000 0.0510 0.6000 +v 1.623880 -0.400000 -0.382683 1.0000 0.2823 0.8862 +v 1.623880 0.400000 -0.382683 1.0000 0.0510 0.6039 +v 1.680785 -0.400000 -0.195090 1.0000 0.6157 0.6745 +v 1.680785 0.400000 -0.195090 1.0000 0.0353 0.7764 +v 1.700000 -0.400000 0.000000 1.0000 0.6236 0.6667 +v 1.700000 0.400000 0.000000 0.9882 0.0039 0.9960 +v 1.680785 -0.400000 0.195090 1.0000 0.0000 0.9098 +v 1.680785 0.400000 0.195090 0.8431 0.0118 0.9568 +v 1.623879 -0.400000 0.382684 1.0000 0.0118 0.9098 +v 1.623879 0.400000 0.382684 0.6118 0.2392 0.9764 +v 1.531470 -0.400000 0.555570 1.0000 0.6432 0.6197 +v 1.531470 0.400000 0.555570 0.6118 0.2314 0.9764 +v 1.407107 0.400000 0.707107 0.5725 0.2353 0.9764 +v 0.000000 -0.400000 -0.707107 1.0000 0.0000 0.6706 +v -0.000000 0.400000 2.121320 0.0000 0.8078 1.0000 +v -0.000000 -0.400000 2.121320 1.0000 0.9215 0.0000 +v 1.407107 -0.400000 0.707107 1.0000 0.7804 0.4157 +v -0.144430 -0.400000 -0.831470 0.9019 0.4392 0.6039 +v -0.144430 0.400000 -0.831470 1.0000 0.6118 0.2118 +v -0.317317 -0.400000 -0.923880 0.6706 0.7451 0.6039 +v -0.317317 0.400000 -0.923880 1.0000 0.6079 0.2353 +v -0.504910 -0.400000 -0.980785 0.2353 0.9764 0.1961 +v -0.504910 0.400000 -0.980785 1.0000 0.0471 0.9137 +v -0.700000 -0.400000 -1.000000 0.4039 0.9176 0.3608 +v -0.700000 0.400000 -1.000000 1.0000 0.0000 0.9098 +v -0.895090 -0.400000 -0.980785 0.4039 0.9176 0.3608 +v -0.895090 0.400000 -0.980785 1.0000 0.0000 0.9098 +v -1.082683 -0.400000 -0.923880 0.2627 0.9686 0.2235 +v -1.082683 0.400000 -0.923880 1.0000 0.1176 0.9568 +v -1.255570 -0.400000 -0.831470 0.5608 0.8313 0.5059 +v -1.255570 0.400000 -0.831470 1.0000 0.0000 0.9568 +v -1.407107 -0.400000 -0.707107 0.7764 0.9960 0.0902 +v -1.407107 0.400000 -0.707107 1.0000 0.1176 0.9568 +v -1.531470 -0.400000 -0.555570 0.8784 0.9411 0.3059 +v -1.531470 0.400000 -0.555570 1.0000 0.0000 0.9568 +v -1.623880 -0.400000 -0.382683 0.8823 0.9333 0.3255 +v -1.623880 0.400000 -0.382683 0.9843 1.0000 0.0196 +v -1.680785 -0.400000 -0.195090 0.7451 0.8784 0.4589 +v -1.680785 0.400000 -0.195090 0.6980 0.7412 0.6393 +v -1.700000 -0.400000 -0.000000 0.2196 0.7686 0.6393 +v -1.700000 0.400000 -0.000000 0.2549 1.0000 0.0039 +v -1.680785 -0.400000 0.195090 0.0510 0.2039 0.9804 +v -1.680785 0.400000 0.195090 0.2510 1.0000 0.0039 +v -1.623879 -0.400000 0.382683 0.0549 0.2235 0.9764 +v -1.623879 0.400000 0.382683 0.2510 1.0000 0.0039 +v -1.531470 -0.400000 0.555570 0.0980 0.4235 0.9019 +v -1.531470 0.400000 0.555570 0.2510 1.0000 0.0039 +v -1.407107 0.400000 0.707107 0.2549 1.0000 0.0078 +v -1.407107 -0.400000 0.707107 0.1059 0.2039 0.9804 +vn -0.6525 -0.0000 -0.7578 +vn -0.4714 -0.0000 -0.8819 +vn -0.2903 -0.0000 -0.9569 +vn -0.0980 -0.0000 -0.9952 +vn 0.0980 -0.0000 -0.9952 +vn 0.2903 -0.0000 -0.9569 +vn 0.4714 -0.0000 -0.8819 +vn 0.6344 -0.0000 -0.7730 +vn 0.7730 -0.0000 -0.6344 +vn 0.8819 -0.0000 -0.4714 +vn 0.9569 -0.0000 -0.2903 +vn 0.9952 -0.0000 -0.0980 +vn 0.9952 -0.0000 0.0980 +vn 0.9569 -0.0000 0.2903 +vn 0.8819 -0.0000 0.4714 +vn 0.7730 -0.0000 0.6344 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.7089 -0.0000 0.7053 +vn 0.6525 -0.0000 -0.7578 +vn -0.6344 -0.0000 -0.7730 +vn -0.7730 -0.0000 -0.6344 +vn -0.8819 -0.0000 -0.4714 +vn -0.9569 -0.0000 -0.2903 +vn -0.9952 -0.0000 -0.0980 +vn -0.9952 -0.0000 0.0980 +vn -0.9569 -0.0000 0.2903 +vn -0.8819 -0.0000 0.4714 +vn -0.7730 -0.0000 0.6344 +vn -0.7089 -0.0000 0.7053 +s 0 +f 1//1 2//1 33//1 +f 3//2 4//2 2//2 +f 5//3 6//3 4//3 +f 7//4 8//4 6//4 +f 9//5 10//5 8//5 +f 11//6 12//6 10//6 +f 13//7 14//7 12//7 +f 15//8 16//8 14//8 +f 17//9 18//9 16//9 +f 19//10 20//10 18//10 +f 21//11 22//11 20//11 +f 23//12 24//12 22//12 +f 25//13 26//13 24//13 +f 27//14 28//14 26//14 +f 29//15 30//15 28//15 +f 31//16 36//16 30//16 +f 1//17 19//17 11//17 +f 2//18 18//18 26//18 +f 32//19 35//19 36//19 +f 36//18 35//18 33//18 +f 34//17 32//17 1//17 +f 37//20 1//20 33//20 +f 39//7 38//7 37//7 +f 41//6 40//6 39//6 +f 43//5 42//5 41//5 +f 45//4 44//4 43//4 +f 47//3 46//3 45//3 +f 49//2 48//2 47//2 +f 51//21 50//21 49//21 +f 53//22 52//22 51//22 +f 55//23 54//23 53//23 +f 57//24 56//24 55//24 +f 59//25 58//25 57//25 +f 61//26 60//26 59//26 +f 63//27 62//27 61//27 +f 65//28 64//28 63//28 +f 68//29 66//29 65//29 +f 40//17 56//17 64//17 +f 68//18 51//18 43//18 +f 35//30 67//30 68//30 +f 68//18 33//18 35//18 +f 34//17 1//17 67//17 +f 1//1 3//1 2//1 +f 3//2 5//2 4//2 +f 5//3 7//3 6//3 +f 7//4 9//4 8//4 +f 9//5 11//5 10//5 +f 11//6 13//6 12//6 +f 13//7 15//7 14//7 +f 15//8 17//8 16//8 +f 17//9 19//9 18//9 +f 19//10 21//10 20//10 +f 21//11 23//11 22//11 +f 23//12 25//12 24//12 +f 25//13 27//13 26//13 +f 27//14 29//14 28//14 +f 29//15 31//15 30//15 +f 31//16 32//16 36//16 +f 5//17 3//17 1//17 +f 1//17 32//17 31//17 +f 31//17 29//17 27//17 +f 27//17 25//17 23//17 +f 23//17 21//17 19//17 +f 19//17 17//17 15//17 +f 15//17 13//17 11//17 +f 11//17 9//17 7//17 +f 7//17 5//17 1//17 +f 1//17 31//17 27//17 +f 27//17 23//17 19//17 +f 19//17 15//17 11//17 +f 11//17 7//17 1//17 +f 1//17 27//17 19//17 +f 36//18 33//18 2//18 +f 2//18 4//18 6//18 +f 6//18 8//18 10//18 +f 10//18 12//18 14//18 +f 14//18 16//18 18//18 +f 18//18 20//18 22//18 +f 22//18 24//18 26//18 +f 26//18 28//18 30//18 +f 30//18 36//18 2//18 +f 2//18 6//18 10//18 +f 10//18 14//18 18//18 +f 18//18 22//18 26//18 +f 26//18 30//18 2//18 +f 2//18 10//18 18//18 +f 32//19 34//19 35//19 +f 37//20 38//20 1//20 +f 39//7 40//7 38//7 +f 41//6 42//6 40//6 +f 43//5 44//5 42//5 +f 45//4 46//4 44//4 +f 47//3 48//3 46//3 +f 49//2 50//2 48//2 +f 51//21 52//21 50//21 +f 53//22 54//22 52//22 +f 55//23 56//23 54//23 +f 57//24 58//24 56//24 +f 59//25 60//25 58//25 +f 61//26 62//26 60//26 +f 63//27 64//27 62//27 +f 65//28 66//28 64//28 +f 68//29 67//29 66//29 +f 1//17 38//17 40//17 +f 40//17 42//17 44//17 +f 44//17 46//17 48//17 +f 48//17 50//17 52//17 +f 52//17 54//17 56//17 +f 56//17 58//17 60//17 +f 60//17 62//17 64//17 +f 64//17 66//17 67//17 +f 67//17 1//17 40//17 +f 40//17 44//17 48//17 +f 48//17 52//17 56//17 +f 56//17 60//17 64//17 +f 64//17 67//17 40//17 +f 40//17 48//17 56//17 +f 37//18 33//18 68//18 +f 68//18 65//18 63//18 +f 63//18 61//18 59//18 +f 59//18 57//18 55//18 +f 55//18 53//18 51//18 +f 51//18 49//18 47//18 +f 47//18 45//18 43//18 +f 43//18 41//18 39//18 +f 39//18 37//18 68//18 +f 68//18 63//18 59//18 +f 59//18 55//18 51//18 +f 51//18 47//18 43//18 +f 43//18 39//18 68//18 +f 68//18 59//18 51//18 +f 35//30 34//30 67//30 diff --git a/holly/core_bits.hpp b/holly/core_bits.hpp index d288e96..81bf1a6 100644 --- a/holly/core_bits.hpp +++ b/holly/core_bits.hpp @@ -1,3 +1,5 @@ +#pragma once + #include #include "../float_uint32.hpp" @@ -139,7 +141,7 @@ namespace fpu_shad_scale { } namespace fpu_cull_val { - constexpr uint32_t culling_comparison_value(float num) { return _i(__builtin_fabsf(num));; } + inline uint32_t culling_comparison_value(float num) { return _i(__builtin_fabsf(num));; } } namespace fpu_param_cfg { @@ -180,11 +182,11 @@ namespace half_offset { } namespace fpu_perp_val { - constexpr uint32_t perpendicular_triangle_compare(float num) { return _i(__builtin_fabsf(num));; } + inline uint32_t perpendicular_triangle_compare(float num) { return _i(__builtin_fabsf(num));; } } namespace isp_backgnd_d { - constexpr uint32_t background_plane_depth(float num) { return _i(num) & 0xfffffff0; } + inline uint32_t background_plane_depth(float num) { return _i(num) & 0xfffffff0; } } namespace isp_backgnd_t { diff --git a/math/vec4.hpp b/math/vec4.hpp index bbf7813..5b28c27 100644 --- a/math/vec4.hpp +++ b/math/vec4.hpp @@ -18,6 +18,7 @@ struct vec<4, T> inline constexpr vec(); inline constexpr vec(T scalar); inline constexpr vec(T _x, T _y, T _z, T _w); + inline constexpr vec(const vec<3, T>& v); constexpr inline vec<4, T> operator-() const; inline constexpr T const& operator[](int i) const; @@ -41,6 +42,11 @@ inline constexpr vec<4, T>::vec(T _x, T _y, T _z, T _w) : x(_x), y(_y), z(_z), w(_w) {} +template +inline constexpr vec<4, T>::vec(const vec<3, T>& v) + : x(v.x), y(v.y), z(v.z), w(1.f) +{} + template constexpr inline vec<4, T> vec<4, T>::operator-() const { diff --git a/tools/obj_to_cpp.py b/tools/obj_to_cpp.py index 17a7919..4ee6db6 100644 --- a/tools/obj_to_cpp.py +++ b/tools/obj_to_cpp.py @@ -1,6 +1,7 @@ import math from dataclasses import dataclass import sys +from typing import Union from generate import renderer @@ -13,18 +14,30 @@ class Vertex: y: float z: float +@dataclass(frozen=True) +class Color: + r: float + g: float + b: float + @dataclass(frozen=True) class TextureCoordinate: u: float v: float +@dataclass +class VertexNormal: + vertex: int + normal: int + @dataclass class VertexTextureNormal: vertex: int texture: int normal: int -Face = tuple[VertexTextureNormal, VertexTextureNormal, VertexTextureNormal] +Face = Union[tuple[VertexTextureNormal, VertexTextureNormal, VertexTextureNormal], + tuple[VertexNormal, VertexNormal, VertexNormal]] name = None @@ -34,10 +47,17 @@ def parse_object(line): return name.lower() def parse_vertex(line): - h, *xyz = line.split() + h, *xyz_rgb = line.split() assert h == 'v' or h == 'vn' - assert len(xyz) == 3 - return Vertex(*map(float, xyz)) + if h == 'vn': + assert len(xyz_rgb) == 3 + if h == 'v': + assert len(xyz_rgb) == 6 or len(xyz_rgb) == 3 + coords = list(map(float, xyz_rgb)) + if len(xyz_rgb) == 6: + return Vertex(*coords[0:3]), Color(*coords[3:6]) + else: + return Vertex(*coords[0:3]) def parse_texture_coordinate(line): h, *uv = line.split() @@ -47,7 +67,7 @@ def parse_texture_coordinate(line): def maybe_int(i, offset): if i.strip() == "": - assert False + return None else: return int(i) + offset @@ -62,14 +82,36 @@ def parse_face(line): maybe_int(iix, offset=-1) for iix in ix ] - return VertexTextureNormal(vertex_ix, uv_ix, normal_ix) + assert vertex_ix is not None + assert normal_ix is not None + if uv_ix is None: + return VertexNormal(vertex_ix, normal_ix) + else: + return VertexTextureNormal(vertex_ix, uv_ix, normal_ix) return tuple(map(parse_ixs, tri)) +def vertex_type(vertices): + types = set(type(v) for v in vertices) + assert len(types) == 1, types + if type(vertices[0]) is tuple: + return "position__color" + elif type(vertices[0]) is Vertex: + return "vec3" + else: + assert False, type(verticies[0]) + def generate_vertices(vertices): - yield "constexpr vec3 vertices[] = {" - for v in vertices: - yield f"{{ {v.x:9f}f, {v.y:9f}f, {v.z:9f}f }}," + type_str = vertex_type(vertices) + yield f"constexpr {type_str} vertices[] = {{" + for p_c in vertices: + if type(p_c) is tuple: + p, c = p_c + yield f"{{ {{{p.x:9f}f, {p.y:9f}f, {p.z:9f}f}}, {{{c.r:9f}f, {c.g:9f}f, {c.b:9f}f}} }}," + else: + assert type(p_c) is Vertex + p = p_c + yield f"{{ {v.x:9f}f, {v.y:9f}f, {v.z:9f}f }}," yield "};" yield "" @@ -87,26 +129,42 @@ def generate_texture_coordinates(texture_coordinates): yield "};" yield "" -def generate_faces(faces): +def face_type_str(face_type): + if face_type is VertexNormal: + return "face_vn" + elif face_type is VertexTextureNormal: + return "face_vtn" + else: + assert False, face_type + +def generate_faces(faces, face_type): + def face_coords(vtn): + if face_type is VertexNormal: + return [vtn.vertex, vtn.normal] + elif face_type is VertexTextureNormal: + return [vtn.vertex, vtn.texture, vtn.normal] + else: + assert False, face_type max_ix = max( i for f in faces for vtn in f - for i in [vtn.vertex, vtn.texture, vtn.normal] + for i in face_coords(vtn) ) align = 1 + math.floor(math.log(max_ix) / math.log(10)) - yield "constexpr face faces[] = {" + type_str = face_type_str(face_type) + yield f"constexpr {type_str} faces[] = {{" def align_vtn(vtn): - return ", ".join(str(ix).rjust(align) for ix in [vtn.vertex, vtn.texture, vtn.normal]) + return ", ".join(str(ix).rjust(align) for ix in face_coords(vtn)) for f in faces: inner = ", ".join(f"{{{align_vtn(vtn)}}}" for vtn in f) yield f"{{{inner}}}," yield "};" yield "" - yield "constexpr uint32_t num_faces = (sizeof (faces)) / (sizeof (face));" + yield f"constexpr uint32_t num_faces = (sizeof (faces)) / (sizeof ({type_str}));" yield "" -def generate_namespace(vertices, texture_coordinates, normals, faces): +def generate_namespace(vertices, texture_coordinates, normals, faces, face_type): global name assert name is not None yield "#pragma once" @@ -116,9 +174,10 @@ def generate_namespace(vertices, texture_coordinates, normals, faces): yield f"namespace {name} {{" yield from generate_vertices(vertices) - yield from generate_texture_coordinates(texture_coordinates) + if texture_coordinates != []: + yield from generate_texture_coordinates(texture_coordinates) yield from generate_normals(normals) - yield from generate_faces(faces) + yield from generate_faces(faces, face_type) yield "}" @@ -163,10 +222,14 @@ def main(): else: pass - texture_coordinates, faces = merge_texture_coordinates(texture_coordinates, faces) + face_types = set(type(vtn) for f in faces for vtn in f) + assert len(face_types) == 1, face_types + face_type = next(iter(face_types)) + if face_type is VertexTextureNormal: + texture_coordinates, faces = merge_texture_coordinates(texture_coordinates, faces) render, out = renderer() - render(generate_namespace(vertices, texture_coordinates, normals, faces)) + render(generate_namespace(vertices, texture_coordinates, normals, faces, face_type)) sys.stdout.write(out.getvalue()) if __name__ == '__main__':