/*
- * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved
+ * Copyright (C) 2021-2024 Mt.ZERO Software, Harry Godden - All Rights Reserved
*/
-#ifndef WORLD_RENDER_H
-#define WORLD_RENDER_H
+#pragma once
#define WORLD_CUBEMAP_RES 32
-#include "camera.h"
+#include "vg/vg_camera.h"
#include "world.h"
-
#include "shaders/scene_standard.h"
#include "shaders/scene_standard_alphatest.h"
+#include "shaders/scene_foliage.h"
+#include "shaders/scene_override.h"
#include "shaders/scene_cubemapped.h"
#include "shaders/scene_vertex_blend.h"
#include "shaders/scene_terrain.h"
#include "shaders/scene_position.h"
#include "shaders/scene_font.h"
#include "shaders/model_sky.h"
+#include "shaders/model_sky_space.h"
static const float k_world_light_cube_size = 8.0f;
-struct world_render{
+struct world_render
+{
GLuint tex_terrain_noise;
/* rendering */
u32 timer_text_count;
struct text_particle{
- rb_object obj;
+ rigidbody rb;
m4x3f mlocal;
ent_glyph *glyph;
v4f colour;
-
m4x3f mdl;
+ f32 radius;
}
text_particles[6*4];
u32 text_particle_count;
}
-static world_render;
-VG_STATIC void world_render_init(void);
+extern world_render;
+
+void world_render_init(void);
+
+void world_prerender( world_instance *world );
+void world_link_lighting_ub( world_instance *world, GLuint shader );
+void world_bind_position_texture( world_instance *world,
+ GLuint shader, GLuint location,
+ int slot );
+void world_bind_light_array( world_instance *world,
+ GLuint shader, GLuint location,
+ int slot );
+void world_bind_light_index( world_instance *world,
+ GLuint shader, GLuint location,
+ int slot );
+void render_world_position( world_instance *world, vg_camera *cam );
+void render_world_depth( world_instance *world, vg_camera *cam );
+void render_world( world_instance *world, vg_camera *cam,
+ int stenciled, int viewing_from_gate,
+ int with_water, int with_cubemaps );
+void render_world_cubemaps( world_instance *world );
+void bind_terrain_noise(void);
+void render_world_override( world_instance *world,
+ world_instance *lighting_source,
+ m4x3f mmdl,
+ vg_camera *cam,
+ ent_spawn *dest_spawn, v4f map_info );
+void render_world_gates( world_instance *world, vg_camera *cam );
+void imgui_world_light_edit( ui_context *ctx, world_instance *world );
-VG_STATIC void world_link_lighting_ub( world_instance *world, GLuint shader );
-VG_STATIC void world_bind_position_texture( world_instance *world,
- GLuint shader, GLuint location,
- int slot );
-VG_STATIC void world_bind_light_array( world_instance *world,
- GLuint shader, GLuint location,
- int slot );
-VG_STATIC void world_bind_light_index( world_instance *world,
- GLuint shader, GLuint location,
- int slot );
-VG_STATIC void render_world_position( world_instance *world, camera *cam );
-VG_STATIC void render_world_depth( world_instance *world, camera *cam );
-VG_STATIC void render_world( world_instance *world, camera *cam,
- int layer_depth );
-VG_STATIC void render_world_cubemaps( world_instance *world );
+#define WORLD_BIND_LIGHT_BUFFERS_UB0_TEX234( WORLD, SHADER ) \
+ world_link_lighting_ub( WORLD, _shader_##SHADER.id ); \
+ world_bind_position_texture( WORLD, _shader_##SHADER.id, \
+ _uniform_##SHADER##_g_world_depth, 2 ); \
+ world_bind_light_array( WORLD, _shader_##SHADER.id, \
+ _uniform_##SHADER##_uLightsArray, 3 ); \
+ world_bind_light_index( WORLD, _shader_##SHADER.id, \
+ _uniform_##SHADER##_uLightsIndex, 4 );
-#endif /* WORLD_RENDER_H */