projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
minor changes
[carveJwlIkooP6JGAAIwe30JlM.git]
/
world_gen.c
diff --git
a/world_gen.c
b/world_gen.c
index 2650539a48679dbc8957779da68003c9d1b74a2f..0b0c3442e3105773cf81f127405cb9bed86e6dd3 100644
(file)
--- a/
world_gen.c
+++ b/
world_gen.c
@@
-18,7
+18,7
@@
* Add all triangles from the model, which match the material ID
* applies affine transform to the model
*/
* Add all triangles from the model, which match the material ID
* applies affine transform to the model
*/
-
VG_STATIC
void world_add_all_if_material( m4x3f transform, scene_context *scene,
+
static
void world_add_all_if_material( m4x3f transform, scene_context *scene,
mdl_context *mdl, u32 id )
{
for( u32 i=0; i<mdl_arrcount(&mdl->meshs); i++ ){
mdl_context *mdl, u32 id )
{
for( u32 i=0; i<mdl_arrcount(&mdl->meshs); i++ ){
@@
-46,7
+46,7
@@
VG_STATIC void world_add_all_if_material( m4x3f transform, scene_context *scene,
* | |
* |________|
*/
* | |
* |________|
*/
-
VG_STATIC
void world_gen_add_blob( world_instance *world,
+
static
void world_gen_add_blob( world_instance *world,
scene_context *scene, ray_hit *hit )
{
m4x3f transform;
scene_context *scene, ray_hit *hit )
{
m4x3f transform;
@@
-106,7
+106,7
@@
VG_STATIC void world_gen_add_blob( world_instance *world,
/*
* Sprinkle foliage models over the map on terrain material
*/
/*
* Sprinkle foliage models over the map on terrain material
*/
-
VG_STATIC
void world_apply_procedural_foliage( world_instance *world,
+
static
void world_apply_procedural_foliage( world_instance *world,
scene_context *scene,
struct world_surface *mat )
{
scene_context *scene,
struct world_surface *mat )
{
@@
-136,7
+136,8
@@
VG_STATIC void world_apply_procedural_foliage( world_instance *world,
ray_hit hit;
hit.dist = INFINITY;
ray_hit hit;
hit.dist = INFINITY;
- if( ray_world( world, pos, (v3f){0.0f,-1.0f,0.0f}, &hit )){
+ if( ray_world( world, pos, (v3f){0.0f,-1.0f,0.0f}, &hit,
+ k_material_flag_ghosts )){
struct world_surface *m1 = ray_hit_surface( world, &hit );
if((hit.normal[1] > 0.8f) && (m1 == mat) && (hit.pos[1] > 0.0f+10.0f)){
world_gen_add_blob( world, scene, &hit );
struct world_surface *m1 = ray_hit_surface( world, &hit );
if((hit.normal[1] > 0.8f) && (m1 == mat) && (hit.pos[1] > 0.0f+10.0f)){
world_gen_add_blob( world, scene, &hit );
@@
-148,7
+149,7
@@
VG_STATIC void world_apply_procedural_foliage( world_instance *world,
vg_info( "%d foliage models added\n", count );
}
vg_info( "%d foliage models added\n", count );
}
-VG_STATIC
+static
void world_unpack_submesh_dynamic( world_instance *world,
scene_context *scene, mdl_submesh *sm ){
if( sm->flags & k_submesh_flag_consumed ) return;
void world_unpack_submesh_dynamic( world_instance *world,
scene_context *scene, mdl_submesh *sm ){
if( sm->flags & k_submesh_flag_consumed ) return;
@@
-164,7
+165,7
@@
void world_unpack_submesh_dynamic( world_instance *world,
/*
* Create the main meshes for the world
*/
/*
* Create the main meshes for the world
*/
-
VG_STATIC
void world_gen_generate_meshes( world_instance *world ){
+
static
void world_gen_generate_meshes( world_instance *world ){
/*
* Compile meshes into the world scenes
*/
/*
* Compile meshes into the world scenes
*/
@@
-191,6
+192,10
@@
VG_STATIC void world_gen_generate_meshes( world_instance *world ){
&world->meta, i );
scene_copy_slice( &world->scene_geo, &surf->sm_geo );
&world->meta, i );
scene_copy_slice( &world->scene_geo, &surf->sm_geo );
+ scene_set_vertex_flags( &world->scene_geo,
+ surf->sm_geo.vertex_start,
+ surf->sm_geo.vertex_count,
+ (u16)(surf->info.flags & 0xffff) );
}
/* compress that bad boy */
}
/* compress that bad boy */
@@
-272,12
+277,12
@@
VG_STATIC void world_gen_generate_meshes( world_instance *world ){
}
/* unpack challenge models */
}
/* unpack challenge models */
- for( u32 i=0; i<mdl_arrcount( &world->ent_
challeng
e ); i++ ){
- ent_
challenge *challenge = mdl_arritm( &world->ent_challeng
e, i );
+ for( u32 i=0; i<mdl_arrcount( &world->ent_
objectiv
e ); i++ ){
+ ent_
objective *objective = mdl_arritm( &world->ent_objectiv
e, i );
- for( u32 j=0; j<
challeng
e->submesh_count; j ++ ){
+ for( u32 j=0; j<
objectiv
e->submesh_count; j ++ ){
mdl_submesh *sm = mdl_arritm( &world->meta.submeshs,
mdl_submesh *sm = mdl_arritm( &world->meta.submeshs,
-
challeng
e->submesh_start+j );
+
objectiv
e->submesh_start+j );
world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm );
}
}
world_unpack_submesh_dynamic( world, &world->scene_no_collide, sm );
}
}
@@
-321,7
+326,7
@@
struct light_indices_upload_info{
/*
* Async reciever to buffer light index data
*/
/*
* Async reciever to buffer light index data
*/
-
VG_STATIC
void async_upload_light_indices( void *payload, u32 size ){
+
static
void async_upload_light_indices( void *payload, u32 size ){
struct light_indices_upload_info *info = payload;
glGenTextures( 1, &info->world->tex_light_cubes );
struct light_indices_upload_info *info = payload;
glGenTextures( 1, &info->world->tex_light_cubes );
@@
-336,7
+341,7
@@
VG_STATIC void async_upload_light_indices( void *payload, u32 size ){
/*
* Computes light indices for world
*/
/*
* Computes light indices for world
*/
-
VG_STATIC
void world_gen_compute_light_indices( world_instance *world ){
+
static
void world_gen_compute_light_indices( world_instance *world ){
/* light cubes */
v3f cubes_min, cubes_max;
v3_muls( world->scene_geo.bbx[0], 1.0f/k_world_light_cube_size, cubes_min );
/* light cubes */
v3f cubes_min, cubes_max;
v3_muls( world->scene_geo.bbx[0], 1.0f/k_world_light_cube_size, cubes_min );
@@
-430,12
+435,14
@@
VG_STATIC void world_gen_compute_light_indices( world_instance *world ){
v3f closest;
closest_point_aabb( light->transform.co, bbx, closest );
v3f closest;
closest_point_aabb( light->transform.co, bbx, closest );
- float dist = v3_dist( closest, light->transform.co ),
- influence = 1.0f/(dist+1.0f);
+ f32 dist2 = v3_dist2( closest, light->transform.co );
- if( dist
>
light->range )
+ if( dist
2 > light->range*
light->range )
continue;
continue;
+ f32 dist = sqrtf(dist2),
+ influence = 1.0f/(dist+1.0f);
+
if( light->type == k_light_type_spot){
v3f local;
m4x3_mulv( light->inverse_world, center, local );
if( light->type == k_light_type_spot){
v3f local;
m4x3_mulv( light->inverse_world, center, local );
@@
-494,7
+501,7
@@
VG_STATIC void world_gen_compute_light_indices( world_instance *world ){
/*
* Rendering pass needed to complete the world
*/
/*
* Rendering pass needed to complete the world
*/
-
VG_STATIC
void async_world_postprocess( void *payload, u32 _size ){
+
static
void async_world_postprocess( void *payload, u32 _size ){
/* create scene lighting buffer */
world_instance *world = payload;
/* create scene lighting buffer */
world_instance *world = payload;
@@
-649,7
+656,7
@@
VG_STATIC void async_world_postprocess( void *payload, u32 _size ){
}
/* Loads textures from the pack file */
}
/* Loads textures from the pack file */
-
VG_STATIC
void world_gen_load_surfaces( world_instance *world ){
+
static
void world_gen_load_surfaces( world_instance *world ){
vg_info( "Loading textures\n" );
world->texture_count = 0;
vg_info( "Loading textures\n" );
world->texture_count = 0;