#pragma pack(push,1)
-/* 24 byte vertexs, we don't care about the normals too much,
+/* 32 byte vertexs, we don't care about the normals too much,
* maybe possible to bring down uv to i16s too */
struct scene_vert
{
v3f co; /* 3*32 */
v2f uv; /* 2*32 */
i8 norm[4]; /* 4*8 */
+ u16 unused[4];
};
#pragma pack(pop)
VG_STATIC void scene_add_mdl_submesh( scene *pscene, mdl_context *mdl,
mdl_submesh *sm, m4x3f transform )
{
- if( pscene->vertex_count + sm->vertex_count > pscene->max_vertices )
- {
+ if( pscene->vertex_count + sm->vertex_count > pscene->max_vertices ){
vg_error( "%u(current) + %u > %u\n", pscene->vertex_count,
sm->vertex_count,
pscene->max_vertices );
vg_fatal_exit_loop( "Scene vertex buffer overflow" );
}
- if( pscene->indice_count + sm->indice_count > pscene->max_indices )
- {
+ if( pscene->indice_count + sm->indice_count > pscene->max_indices ){
vg_error( "%u(current) + %u > %u\n", pscene->indice_count,
sm->indice_count,
pscene->max_indices );
vg_fatal_exit_loop( "Scene index buffer overflow" );
}
- mdl_vert *src_verts = mdl_submesh_vertices( mdl, sm );
+ mdl_vert *src_verts = mdl_arritm( &mdl->verts, sm->vertex_start );
scene_vert *dst_verts = &pscene->arrvertices[ pscene->vertex_count ];
- u32 *src_indices = mdl_submesh_indices( mdl, sm ),
+ u32 *src_indices = mdl_arritm( &mdl->indices, sm->indice_start ),
*dst_indices = &pscene->arrindices[ pscene->indice_count ];
/* Transform and place vertices */
v3_normalize( normal_matrix[1] );
v3_normalize( normal_matrix[2] );
- for( u32 i=0; i<sm->vertex_count; i++ )
- {
+ for( u32 i=0; i<sm->vertex_count; i++ ){
mdl_vert *src = &src_verts[ i ];
scene_vert *pvert = &dst_verts[ i ];
{
/* FIXME: Why is this disabled? */
- return pscene;
u32 vertex_count = pscene->vertex_count,
indice_count = pscene->indice_count,
vertex_length = vertex_count * sizeof(scene_vert),
index_length = indice_count * sizeof(u32),
- tot_size = sizeof(scene) + vertex_length + index_length;
+ tot_size = sizeof(scene) + vertex_length + index_length;
/* copy down index data */
- void *dst_indices = pscene->arrvertices + vertex_length;
+ void *dst_indices = pscene->arrvertices + vertex_count;
memmove( dst_indices, pscene->arrindices, index_length );
/* realloc */
stride, (void *)offsetof(scene_vert, uv) );
glEnableVertexAttribArray( 2 );
+#if 0
+ /* 3: light cluster */
+ glVertexAttribIPointer( 3, 4, GL_UNSIGNED_SHORT,
+ stride, (void *)offsetof(scene_vert, lights) );
+ glEnableVertexAttribArray( 3 );
+#endif
+
VG_CHECK_GL_ERR();
mesh->indice_count = pscene->indice_count;
*pb = &s->arrvertices[ s->arrindices[item_index*3+1] ],
*pc = &s->arrvertices[ s->arrindices[item_index*3+2] ];
+ #if 0
+
+ float min, max;
+
+ min = vg_minf( pa->co[axis], pb->co[axis] );
+ max = vg_maxf( pa->co[axis], pb->co[axis] );
+ min = vg_minf( min, pc->co[axis] );
+ max = vg_maxf( max, pc->co[axis] );
+
+ return (min+max) * 0.5f;
+
+ #else
return (pa->co[axis] + pb->co[axis] + pc->co[axis]) * (1.0f/3.0f);
+ #endif
}
VG_STATIC void scene_bh_swap( void *user, u32 ia, u32 ib )