projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
foliage windy shader
[carveJwlIkooP6JGAAIwe30JlM.git]
/
model.h
diff --git
a/model.h
b/model.h
index 34963be69e49ef7e5d67c4c20241c24e7ef6baa0..a182e51293d9b1d18901e1671d2d39d92a251f1f 100644
(file)
--- a/
model.h
+++ b/
model.h
@@
-20,6
+20,8
@@
enum mdl_shader{
k_shader_boundary = 6,
k_shader_fxglow = 7,
k_shader_cubemap = 8,
k_shader_boundary = 6,
k_shader_fxglow = 7,
k_shader_cubemap = 8,
+ k_shader_walking = 9,
+ k_shader_foliage = 10,
k_shader_override = 30000
};
k_shader_override = 30000
};
@@
-310,9
+312,10
@@
static void mdl_load_array_file_buffer( mdl_context *mdl, mdl_array *arr,
if( l != 1 ) mdl_load_fatal_corrupt( mdl );
}
else {
if( l != 1 ) mdl_load_fatal_corrupt( mdl );
}
else {
- assert( stride >= arr->item_size );
vg_warn( "Applying alignment fixup to array @%p [%u -> %u] x %u\n",
buffer, arr->item_size, stride, arr->item_count );
vg_warn( "Applying alignment fixup to array @%p [%u -> %u] x %u\n",
buffer, arr->item_size, stride, arr->item_count );
+ if( stride < arr->item_size )
+ vg_fatal_error( "not safe\n" );
for( u32 i=0; i<arr->item_count; i++ ){
u64 l = fread( buffer+i*stride, arr->item_size, 1, mdl->file );
for( u32 i=0; i<arr->item_count; i++ ){
u64 l = fread( buffer+i*stride, arr->item_size, 1, mdl->file );
@@
-325,7
+328,10
@@
static void mdl_load_array_file_buffer( mdl_context *mdl, mdl_array *arr,
static void mdl_load_array_file( mdl_context *mdl, mdl_array_ptr *ptr,
mdl_array *arr, void *lin_alloc, u32 stride )
{
static void mdl_load_array_file( mdl_context *mdl, mdl_array_ptr *ptr,
mdl_array *arr, void *lin_alloc, u32 stride )
{
- assert( stride >= arr->item_size );
+ if( stride < arr->item_size ){
+ vg_error( "Structure max: %u. Got: %u\n", stride, arr->item_size );
+ vg_fatal_error( "not safe\n" );
+ }
if( arr->item_count ){
u32 size = stride*arr->item_count;
if( arr->item_count ){
u32 size = stride*arr->item_count;
@@
-604,8
+610,8
@@
static void async_mdl_load_glmesh( void *payload, u32 size )
job->indices, job->indice_count );
}
job->indices, job->indice_count );
}
-static void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh
)
-{
+static void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh
,
+
u32 *fixup_table )
{
mdl_array *arr_vertices = mdl_find_array( mdl, "mdl_vert" );
mdl_array *arr_indices = mdl_find_array( mdl, "mdl_indice" );
mdl_array *arr_vertices = mdl_find_array( mdl, "mdl_vert" );
mdl_array *arr_indices = mdl_find_array( mdl, "mdl_indice" );
@@
-631,6
+637,16
@@
static void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh )
mdl_load_array_file_buffer( mdl, arr_indices, job->indices,
sizeof(mdl_indice) );
mdl_load_array_file_buffer( mdl, arr_indices, job->indices,
sizeof(mdl_indice) );
+ if( fixup_table ){
+ for( u32 i=0; i<job->vertex_count; i ++ ){
+ mdl_vert *vert = &job->verts[i];
+
+ for( u32 j=0; j<4; j++ ){
+ vert->groups[j] = fixup_table[vert->groups[j]];
+ }
+ }
+ }
+
/*
* Unpack the indices (if there are meshes)
* ---------------------------------------------------------
/*
* Unpack the indices (if there are meshes)
* ---------------------------------------------------------
@@
-665,7
+681,7
@@
static void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh )
/* uploads the glmesh, and textures. everything is saved into the mdl_context */
static void mdl_async_full_load_std( mdl_context *mdl ){
/* uploads the glmesh, and textures. everything is saved into the mdl_context */
static void mdl_async_full_load_std( mdl_context *mdl ){
- mdl_async_load_glmesh( mdl, &mdl->mesh );
+ mdl_async_load_glmesh( mdl, &mdl->mesh
, NULL
);
for( u32 i=0; i<mdl_arrcount( &mdl->textures ); i ++ ){
vg_linear_clear( vg_mem.scratch );
for( u32 i=0; i<mdl_arrcount( &mdl->textures ); i ++ ){
vg_linear_clear( vg_mem.scratch );