Eevee: Make use of the new view matrix UBO.

This commit is contained in:
Clément Foucault 2018-03-10 00:00:04 +01:00
parent 41abbc271c
commit 82957cfec8
13 changed files with 69 additions and 31 deletions

View File

@ -109,6 +109,7 @@ extern char datatoc_lightprobe_lib_glsl[];
extern char datatoc_octahedron_lib_glsl[];
extern char datatoc_bsdf_common_lib_glsl[];
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_bsdf_sampling_lib_glsl[];
extern GlobalsUboStorage ts;
@ -205,8 +206,10 @@ static void lightprobe_shaders_init(void)
"#define NOISE_SIZE 64\n";
char *shader_str = NULL;
char *vert_str = NULL;
shader_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_bsdf_sampling_lib_glsl,
@ -221,6 +224,7 @@ static void lightprobe_shaders_init(void)
MEM_freeN(shader_str);
shader_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_bsdf_sampling_lib_glsl,
@ -231,6 +235,7 @@ static void lightprobe_shaders_init(void)
MEM_freeN(shader_str);
shader_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_bsdf_sampling_lib_glsl,
@ -242,15 +247,20 @@ static void lightprobe_shaders_init(void)
shader_str = BLI_string_joinN(
datatoc_octahedron_lib_glsl,
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_irradiance_lib_glsl,
datatoc_lightprobe_lib_glsl,
datatoc_lightprobe_grid_display_frag_glsl);
e_data.probe_grid_display_sh = DRW_shader_create(
datatoc_lightprobe_grid_display_vert_glsl, NULL, shader_str, filter_defines);
vert_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_lightprobe_grid_display_vert_glsl);
e_data.probe_grid_display_sh = DRW_shader_create(vert_str, NULL, shader_str, filter_defines);
MEM_freeN(vert_str);
MEM_freeN(shader_str);
e_data.probe_grid_fill_sh = DRW_shader_create_fullscreen(
@ -258,19 +268,33 @@ static void lightprobe_shaders_init(void)
shader_str = BLI_string_joinN(
datatoc_octahedron_lib_glsl,
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_lightprobe_lib_glsl,
datatoc_lightprobe_cube_display_frag_glsl);
e_data.probe_cube_display_sh = DRW_shader_create(
datatoc_lightprobe_cube_display_vert_glsl, NULL, shader_str, NULL);
vert_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_lightprobe_cube_display_vert_glsl);
e_data.probe_cube_display_sh = DRW_shader_create(vert_str, NULL, shader_str, NULL);
MEM_freeN(vert_str);
MEM_freeN(shader_str);
e_data.probe_planar_display_sh = DRW_shader_create(
datatoc_lightprobe_planar_display_vert_glsl, NULL,
datatoc_lightprobe_planar_display_frag_glsl, NULL);
vert_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_lightprobe_planar_display_vert_glsl);
shader_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_lightprobe_planar_display_frag_glsl);
e_data.probe_planar_display_sh = DRW_shader_create(vert_str, NULL, shader_str, NULL);
MEM_freeN(vert_str);
MEM_freeN(shader_str);
e_data.probe_planar_downsample_sh = DRW_shader_create(
datatoc_lightprobe_planar_downsample_vert_glsl,

View File

@ -47,6 +47,7 @@
/* *********** STATIC *********** */
static struct {
char *shadow_shader_lib;
char *frag_shader_lib;
char *volume_shader_lib;
@ -81,6 +82,7 @@ extern char datatoc_bsdf_common_lib_glsl[];
extern char datatoc_bsdf_direct_lib_glsl[];
extern char datatoc_bsdf_sampling_lib_glsl[];
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_irradiance_lib_glsl[];
extern char datatoc_octahedron_lib_glsl[];
extern char datatoc_lit_surface_frag_glsl[];
@ -531,7 +533,7 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
char *frag_str = NULL;
/* Shaders */
e_data.frag_shader_lib = BLI_string_joinN(
e_data.shadow_shader_lib = BLI_string_joinN(
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_bsdf_sampling_lib_glsl,
@ -555,7 +557,12 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
datatoc_lit_surface_frag_glsl,
datatoc_volumetric_lib_glsl);
e_data.frag_shader_lib = BLI_string_joinN(
datatoc_common_view_lib_glsl,
e_data.shadow_shader_lib);
e_data.volume_shader_lib = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_ambient_occlusion_lib_glsl,
@ -755,7 +762,7 @@ struct GPUMaterial *EEVEE_material_mesh_depth_get(
char *defines = eevee_get_defines(options);
char *frag_str = BLI_string_joinN(
e_data.frag_shader_lib,
(is_shadow) ? e_data.shadow_shader_lib : e_data.frag_shader_lib,
datatoc_prepass_frag_glsl);
mat = DRW_shader_create_from_material(
@ -1515,6 +1522,7 @@ void EEVEE_materials_free(void)
for (int i = 0; i < VAR_MAT_MAX; ++i) {
DRW_SHADER_FREE_SAFE(e_data.default_lit[i]);
}
MEM_SAFE_FREE(e_data.shadow_shader_lib);
MEM_SAFE_FREE(e_data.frag_shader_lib);
MEM_SAFE_FREE(e_data.volume_shader_lib);
DRW_SHADER_FREE_SAFE(e_data.default_prepass_sh);

View File

@ -35,6 +35,7 @@
#include "eevee_private.h"
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_bsdf_common_lib_glsl[];
extern char datatoc_effect_mist_frag_glsl[];
@ -59,6 +60,7 @@ void EEVEE_mist_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
if (e_data.mist_sh == NULL) {
char *frag_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_effect_mist_frag_glsl);

View File

@ -44,6 +44,7 @@ static struct {
} e_data = {NULL}; /* Engine data */
extern char datatoc_ambient_occlusion_lib_glsl[];
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_bsdf_common_lib_glsl[];
extern char datatoc_effect_gtao_frag_glsl[];
@ -51,6 +52,7 @@ extern char datatoc_effect_gtao_frag_glsl[];
static void eevee_create_shader_occlusion(void)
{
char *frag_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_ambient_occlusion_lib_glsl,

View File

@ -51,6 +51,7 @@ static struct {
} e_data = {NULL}; /* Engine data */
extern char datatoc_ambient_occlusion_lib_glsl[];
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_bsdf_common_lib_glsl[];
extern char datatoc_bsdf_sampling_lib_glsl[];
@ -63,6 +64,7 @@ static struct GPUShader *eevee_effects_screen_raytrace_shader_get(int options)
{
if (e_data.ssr_sh[options] == NULL) {
char *ssr_shader_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_bsdf_sampling_lib_glsl,

View File

@ -36,12 +36,14 @@ static struct {
struct GPUShader *sss_sh[4];
} e_data = {NULL}; /* Engine data */
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_effect_subsurface_frag_glsl[];
static void eevee_create_shader_subsurface(void)
{
char *frag_str = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_effect_subsurface_frag_glsl);

View File

@ -65,6 +65,7 @@ static struct {
extern char datatoc_bsdf_common_lib_glsl[];
extern char datatoc_bsdf_direct_lib_glsl[];
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_octahedron_lib_glsl[];
extern char datatoc_irradiance_lib_glsl[];
extern char datatoc_lamps_lib_glsl[];
@ -80,11 +81,13 @@ extern char datatoc_gpu_shader_fullscreen_vert_glsl[];
static void eevee_create_shader_volumes(void)
{
e_data.volumetric_common_lib = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_volumetric_lib_glsl);
e_data.volumetric_common_lamps_lib = BLI_string_joinN(
datatoc_common_view_lib_glsl,
datatoc_common_uniforms_lib_glsl,
datatoc_bsdf_common_lib_glsl,
datatoc_bsdf_direct_lib_glsl,

View File

@ -8,12 +8,7 @@
#define LUT_SIZE 64
uniform mat4 ProjectionMatrix;
uniform mat4 ViewProjectionMatrix;
uniform mat4 ViewMatrixInverse;
#ifndef SHADOW_SHADER
uniform mat4 ViewMatrix;
#else
#ifdef SHADOW_SHADER
layout(std140) uniform shadow_render_block {
mat4 ShadowMatrix[6];
mat4 FaceViewMatrix[6];
@ -27,7 +22,21 @@ layout(std140) uniform shadow_render_block {
};
flat in int shFace; /* Shadow layer we are rendering to. */
#define ViewMatrix FaceViewMatrix[shFace]
/* Replacing viewBlock */
#define ViewMatrix FaceViewMatrix[shFace]
#define ViewProjectionMatrix ShadowMatrix[shFace]
/* TODO optimize */
#define ProjectionMatrix \
mat4(vec4(1.0, 0.0, 0.0, 0.0), \
vec4(0.0, 1.0, 0.0, 0.0), \
vec4(0.0, 0.0, -(farClip + nearClip) / (farClip - nearClip), -1.0), \
vec4(0.0, 0.0, (-2.0 * farClip * nearClip) / (farClip - nearClip), 0.0))
#define ViewMatrixInverse invert(ViewMatrix)
#define ViewProjectionMatrixInverse invert(ViewProjectionMatrix)
#define ProjectionMatrixInverse invert(ProjectionMatrix)
#define CameraTexCoFactors vec4(1.0f, 1.0f, 0.0f, 0.0f)
#endif
/* Buffers */

View File

@ -6,8 +6,6 @@ in int probe_id;
in vec3 probe_location;
in float sphere_size;
uniform mat4 ViewProjectionMatrix;
flat out int pid;
out vec3 worldNormal;
out vec3 worldPosition;

View File

@ -1,8 +1,6 @@
in vec3 pos;
uniform mat4 ViewProjectionMatrix;
uniform float sphere_size;
uniform int offset;
uniform ivec3 grid_resolution;

View File

@ -1,5 +1,4 @@
uniform mat4 ViewProjectionMatrix;
uniform sampler2DArray probePlanars;
in vec3 worldPosition;

View File

@ -4,8 +4,6 @@ in vec3 pos;
in int probe_id;
in mat4 probe_mat;
uniform mat4 ViewProjectionMatrix;
out vec3 worldPosition;
flat out int probeIdx;

View File

@ -1,16 +1,9 @@
uniform mat4 ModelViewMatrix;
#ifndef EEVEE_ENGINE
uniform mat4 ProjectionMatrix;
uniform mat4 ViewMatrixInverse;
uniform mat4 ViewMatrix;
#endif
uniform mat4 ModelMatrix;
uniform mat4 ModelMatrixInverse;
uniform mat4 ModelViewMatrix;
uniform mat4 ModelViewMatrixInverse;
uniform mat4 ProjectionMatrixInverse;
uniform mat3 NormalMatrix;
uniform vec4 CameraTexCoFactors;
/* Old glsl mode compat. */