* World generation/population. Different to regular loading, since it needs to
* create geometry, apply procedural stuff and save that image to files etc.
*/
-
-#ifndef WORLD_GEN_C
-#define WORLD_GEN_C
-
#include "world.h"
#include "world_gen.h"
#include "world_load.h"
#include "world_volumes.h"
#include "world_gate.h"
+#include <string.h>
/*
* Add all triangles from the model, which match the material ID
/*
* Create the main meshes for the world
*/
-static void world_gen_generate_meshes( world_instance *world ){
+void world_gen_generate_meshes( world_instance *world )
+{
/*
* Compile meshes into the world scenes
*/
/*
* Computes light indices for world
*/
-static void world_gen_compute_light_indices( world_instance *world ){
+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 );
/*
* Rendering pass needed to complete the world
*/
-static void async_world_postprocess( void *payload, u32 _size ){
+void async_world_postprocess( void *payload, u32 _size )
+{
/* create scene lighting buffer */
world_instance *world = payload;
/*
* Rendering the depth map
*/
- camera ortho;
+ vg_camera ortho;
v3f extent;
v3_sub( world->scene_geo.bbx[1], world->scene_geo.bbx[0], extent );
ortho.mtx.p[3][1] = (ft + fb) * -tb;
ortho.mtx.p[3][3] = 1.0f;
m4x3_identity( ortho.transform );
- camera_update_view( &ortho );
- camera_finalize( &ortho );
+ vg_camera_update_view( &ortho );
+ vg_camera_finalize( &ortho );
glDisable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
}
/* Loads textures from the pack file */
-static void world_gen_load_surfaces( world_instance *world ){
+void world_gen_load_surfaces( world_instance *world )
+{
vg_info( "Loading textures\n" );
world->texture_count = 0;
vg_align8(sizeof(GLuint)*world->texture_count) );
world->textures[0] = vg.tex_missing;
- for( u32 i=0; i<mdl_arrcount(&world->meta.textures); i++ ){
+ for( u32 i=0; i<mdl_arrcount(&world->meta.textures); i++ )
+ {
mdl_texture *tex = mdl_arritm( &world->meta.textures, i );
- if( !tex->file.pack_size ){
+ if( !tex->file.pack_size )
+ {
vg_fatal_error( "World models must have packed textures!" );
}
struct world_surface *errmat = &world->surfaces[0];
memset( errmat, 0, sizeof(struct world_surface) );
- for( u32 i=0; i<mdl_arrcount(&world->meta.materials); i++ ){
+ for( u32 i=0; i<mdl_arrcount(&world->meta.materials); i++ )
+ {
struct world_surface *surf = &world->surfaces[i+1];
surf->info = *(mdl_material *)mdl_arritm( &world->meta.materials, i );
surf->flags = 0;
+
+ if( surf->info.shader == k_shader_water )
+ {
+ struct shader_props_water *props = surf->info.props.compiled;
+ world->ub_lighting.g_water_fog = props->fog_scale;
+ }
+
+ if( surf->info.shader == k_shader_standard_cutout ||
+ surf->info.shader == k_shader_foliage )
+ {
+ struct shader_props_standard *props = surf->info.props.compiled;
+ surf->alpha_tex = props->tex_diffuse;
+ }
+ else
+ surf->alpha_tex = 0;
}
}
-
-#endif /* WORLD_GEN_C */