X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=model.h;h=6ff0a857eaf9d036b1fa050511844ddeb0790fe3;hb=9eb3de757a997becb8406417a4bf613f4cb04900;hp=80ab7cba9f7f6eca7f34ef35a68fea4a274b5080;hpb=6a6539bcfeb7bd693251f7aae31056671a65c0f0;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/model.h b/model.h index 80ab7cb..6ff0a85 100644 --- a/model.h +++ b/model.h @@ -1,11 +1,11 @@ /* - * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved + * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved */ #ifndef MODEL_H #define MODEL_H -#include "common.h" +#include "skaterift.h" #define MDL_VERSION_NR 101 @@ -17,7 +17,8 @@ enum mdl_shader k_shader_standard_vertex_blend = 3, k_shader_water = 4, k_shader_invisible = 5, - k_shader_boundary = 6 + k_shader_boundary = 6, + k_shader_fxglow = 7 }; enum mdl_surface_prop @@ -36,7 +37,8 @@ enum material_flag k_material_flag_grow_grass = 0x00000004, k_material_flag_grindable = 0x00000008, k_material_flag_invisible = 0x00000010, - k_material_flag_boundary = 0x00000020 + k_material_flag_boundary = 0x00000020, + k_material_flag_preview_visibile = 0x00000040 }; #pragma pack(push,1) @@ -71,6 +73,14 @@ typedef struct mdl_texture mdl_texture; typedef struct mdl_array mdl_array; typedef struct mdl_header mdl_header; +typedef struct glmesh glmesh; +struct glmesh +{ + GLuint vao, vbo, ebo; + u32 indice_count; + u32 loaded; +}; + struct mdl_transform { v3f co, s; @@ -221,13 +231,11 @@ struct mdl_header mdl_array index; }; -struct mdl_context -{ +struct mdl_context{ FILE *file; mdl_header info; - struct mdl_array_ptr - { + struct mdl_array_ptr{ void *data; u32 count, stride; } @@ -249,11 +257,10 @@ struct mdl_context /* mesh buffers */ verts, indices; - u32 pack_base_offset; - - /* pack data */ - //pack; + + /* runtime */ + glmesh mesh; }; @@ -467,14 +474,6 @@ mdl_pstreq( mdl_context *mdl, u32 pstr, const char *str, u32 djb2 ) * ---------------------------------------------------------------------------- */ -typedef struct glmesh glmesh; -struct glmesh -{ - GLuint vao, vbo, ebo; - u32 indice_count; - u32 loaded; -}; - VG_STATIC void mesh_upload( glmesh *mesh, mdl_vert *verts, u32 vert_count, u32 *indices, u32 indice_count ) @@ -586,11 +585,11 @@ struct payload_glmesh_load{ VG_STATIC void async_mdl_load_glmesh( void *payload, u32 size ) { struct payload_glmesh_load *job = payload; - mesh_upload( job->mesh, job->verts, job->vertex_count, job->indices, job->indice_count ); } +/* TODO: Find out if this needs deprecating in favour of the new full loader */ VG_STATIC void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh ) { mdl_array *arr_vertices = mdl_find_array( mdl, "mdl_vert" ); @@ -647,5 +646,21 @@ VG_STATIC void mdl_async_load_glmesh( mdl_context *mdl, glmesh *mesh ) vg_fatal_error( "no vertex/indice data\n" ); } } + +/* uploads the glmesh, and textures. everything is saved into the mdl_context */ +VG_STATIC void mdl_async_full_load_std( mdl_context *mdl ){ + mdl_async_load_glmesh( mdl, &mdl->mesh ); + + for( u32 i=0; itextures ); i ++ ){ + vg_linear_clear( vg_mem.scratch ); + mdl_texture *tex = mdl_arritm( &mdl->textures, i ); + + void *data = vg_linear_alloc( vg_mem.scratch, tex->file.pack_size ); + mdl_fread_pack_file( mdl, &tex->file, data ); + + vg_tex2d_load_qoi_async( data, tex->file.pack_size, + VG_TEX2D_CLAMP|VG_TEX2D_NEAREST, &tex->glname ); + } +} #endif