holly/region_array: add pre_sort option

This commit is contained in:
Zack Buhman 2025-05-18 02:35:22 -05:00
parent a6a437faee
commit 9364ace4ab
3 changed files with 14 additions and 21 deletions

View File

@ -508,8 +508,8 @@ void transfer_mesh_textured(ta_parameter_writer& writer,
* rotate_quaternion(object->rotation)
* scale(object->scale);
mat4x4 trans_n = trans
* rotate_quaternion(object->rotation);
//mat4x4 trans_n = trans
//* rotate_quaternion(object->rotation);
for (int i = 0; i < mesh->position_length; i++) {
vec3 p = trans_p * mesh->position[i];
@ -521,7 +521,7 @@ void transfer_mesh_textured(ta_parameter_writer& writer,
for (int i = 0; i < mesh->polygons_length; i++) {
const polygon * p = &mesh->polygons[i];
vec3 normal = normalize(normal_multiply(trans_n, mesh->polygon_normal[i]));
//vec3 normal = normalize(normal_multiply(trans_n, mesh->polygon_normal[i]));
vec3 ap = FS(position_cache[p->a]);
vec3 bp = FS(position_cache[p->b]);
@ -875,20 +875,6 @@ int main()
{
serial::init(0);
const vec3 * position = mesh_containercubemesh_position;
const polygon * polygon = mesh_containercubemesh_polygons;
const vec3 * normal = mesh_containercubemesh_polygon_normal;
for (int i = 0; i < 4; i++) {
printf("p (%f %f %f) (%f %f %f) (%f %f %f) (%f %f %f)\n",
position[polygon[i].a].x, position[polygon[i].a].y, position[polygon[i].a].z,
position[polygon[i].b].x, position[polygon[i].b].y, position[polygon[i].b].z,
position[polygon[i].c].x, position[polygon[i].c].y, position[polygon[i].c].z,
position[polygon[i].d].x, position[polygon[i].d].y, position[polygon[i].d].z
);
printf("n (%f %f %f)\n",
normal[i].x, normal[i].y, normal[i].z);
}
interrupt_init();
dma_init();
transfer_textures();
@ -918,7 +904,8 @@ int main()
&opb_size[1],
1,
texture_memory_alloc.region_array.start + tile_param[1].region_array_offset,
texture_memory_alloc.object_list.start);
texture_memory_alloc.object_list.start,
REGION_ARRAY__PRE_SORT);
background_parameter2(texture_memory_alloc.background[0].start,
0xff000000);

View File

@ -117,12 +117,15 @@ void region_array2(const uint32_t width, // in tile units (1 tile unit = 32 pix
}
}
#include "printf/printf.h"
void region_array_multipass(const uint32_t width, // in tile units (1 tile unit = 32 pixels)
const uint32_t height, // in tile units (1 tile unit = 32 pixels)
const struct opb_size * opb_size,
const uint32_t num_render_passes,
const uint32_t region_array_start,
const uint32_t object_list_start)
const uint32_t object_list_start,
const uint32_t pre_sort)
{
auto region_array = reinterpret_cast<volatile region_array_entry *>
(&texture_memory32[region_array_start / 4]);
@ -143,6 +146,8 @@ void region_array_multipass(const uint32_t width, // in tile units (1 tile unit
region_array[ix].tile = REGION_ARRAY__TILE_Y_POSITION(y)
| REGION_ARRAY__TILE_X_POSITION(x);
region_array[ix].tile |= pre_sort;
if (pass == (num_render_passes - 1) && y == (height - 1) && x == (width - 1))
region_array[ix].tile |= REGION_ARRAY__LAST_REGION;

View File

@ -52,4 +52,5 @@ void region_array_multipass(const uint32_t width, // in tile units (1 tile unit
const struct opb_size * opb_size,
const uint32_t num_render_passes,
const uint32_t region_array_start,
const uint32_t object_list_start);
const uint32_t object_list_start,
const uint32_t pre_sort = 0);