mirror of
https://github.com/godotengine/godot
synced 2024-09-05 05:08:27 +00:00
Merge pull request #76977 from manueldun/light-shader-builtins
Enable the use of all supported builtins on the light shader
This commit is contained in:
commit
9ce42d176d
|
@ -642,6 +642,10 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, bool is_di
|
|||
#if defined(USE_LIGHT_SHADER_CODE)
|
||||
// light is written by the light shader
|
||||
|
||||
highp mat4 model_matrix = world_transform;
|
||||
mat4 projection_matrix = scene_data.projection_matrix;
|
||||
mat4 inv_projection_matrix = scene_data.inv_projection_matrix;
|
||||
|
||||
vec3 normal = N;
|
||||
vec3 light = L;
|
||||
vec3 view = V;
|
||||
|
|
|
@ -559,7 +559,7 @@ void SceneShaderForwardClustered::init(const String p_defines) {
|
|||
|
||||
actions.renames["MODEL_MATRIX"] = "read_model_matrix";
|
||||
actions.renames["MODEL_NORMAL_MATRIX"] = "model_normal_matrix";
|
||||
actions.renames["VIEW_MATRIX"] = "scene_data.view_matrix";
|
||||
actions.renames["VIEW_MATRIX"] = "read_view_matrix";
|
||||
actions.renames["INV_VIEW_MATRIX"] = "inv_view_matrix";
|
||||
actions.renames["PROJECTION_MATRIX"] = "projection_matrix";
|
||||
actions.renames["INV_PROJECTION_MATRIX"] = "inv_projection_matrix";
|
||||
|
@ -590,7 +590,7 @@ void SceneShaderForwardClustered::init(const String p_defines) {
|
|||
actions.renames["PI"] = _MKSTR(Math_PI);
|
||||
actions.renames["TAU"] = _MKSTR(Math_TAU);
|
||||
actions.renames["E"] = _MKSTR(Math_E);
|
||||
actions.renames["VIEWPORT_SIZE"] = "scene_data.viewport_size";
|
||||
actions.renames["VIEWPORT_SIZE"] = "read_viewport_size";
|
||||
|
||||
actions.renames["FRAGCOORD"] = "gl_FragCoord";
|
||||
actions.renames["FRONT_FACING"] = "gl_FrontFacing";
|
||||
|
|
|
@ -447,7 +447,7 @@ void SceneShaderForwardMobile::init(const String p_defines) {
|
|||
|
||||
actions.renames["MODEL_MATRIX"] = "read_model_matrix";
|
||||
actions.renames["MODEL_NORMAL_MATRIX"] = "model_normal_matrix";
|
||||
actions.renames["VIEW_MATRIX"] = "scene_data.view_matrix";
|
||||
actions.renames["VIEW_MATRIX"] = "read_view_matrix";
|
||||
actions.renames["INV_VIEW_MATRIX"] = "inv_view_matrix";
|
||||
actions.renames["PROJECTION_MATRIX"] = "projection_matrix";
|
||||
actions.renames["INV_PROJECTION_MATRIX"] = "inv_projection_matrix";
|
||||
|
@ -478,7 +478,7 @@ void SceneShaderForwardMobile::init(const String p_defines) {
|
|||
actions.renames["PI"] = _MKSTR(Math_PI);
|
||||
actions.renames["TAU"] = _MKSTR(Math_TAU);
|
||||
actions.renames["E"] = _MKSTR(Math_E);
|
||||
actions.renames["VIEWPORT_SIZE"] = "scene_data.viewport_size";
|
||||
actions.renames["VIEWPORT_SIZE"] = "read_viewport_size";
|
||||
|
||||
actions.renames["FRAGCOORD"] = "gl_FragCoord";
|
||||
actions.renames["FRONT_FACING"] = "gl_FrontFacing";
|
||||
|
|
|
@ -343,6 +343,8 @@ void vertex_shader(in uint instance_index, in bool is_multimesh, in uint multime
|
|||
|
||||
mat4 modelview = scene_data.view_matrix * model_matrix;
|
||||
mat3 modelview_normal = mat3(scene_data.view_matrix) * model_normal_matrix;
|
||||
mat4 read_view_matrix = scene_data.view_matrix;
|
||||
vec2 read_viewport_size = scene_data.viewport_size;
|
||||
|
||||
{
|
||||
#CODE : VERTEX
|
||||
|
@ -823,7 +825,8 @@ void fragment_shader(in SceneData scene_data) {
|
|||
inv_view_matrix[1][3] = 0.0;
|
||||
inv_view_matrix[2][3] = 0.0;
|
||||
#endif
|
||||
|
||||
mat4 read_view_matrix = scene_data.view_matrix;
|
||||
vec2 read_viewport_size = scene_data.viewport_size;
|
||||
{
|
||||
#CODE : FRAGMENT
|
||||
}
|
||||
|
|
|
@ -342,6 +342,8 @@ void main() {
|
|||
|
||||
mat4 modelview = scene_data.view_matrix * model_matrix;
|
||||
mat3 modelview_normal = mat3(scene_data.view_matrix) * model_normal_matrix;
|
||||
mat4 read_view_matrix = scene_data.view_matrix;
|
||||
vec2 read_viewport_size = scene_data.viewport_size;
|
||||
|
||||
{
|
||||
#CODE : VERTEX
|
||||
|
@ -771,6 +773,9 @@ void main() {
|
|||
inv_view_matrix[2][3] = 0.0;
|
||||
#endif
|
||||
|
||||
mat4 read_view_matrix = scene_data.view_matrix;
|
||||
vec2 read_viewport_size = scene_data.viewport_size;
|
||||
|
||||
{
|
||||
#CODE : FRAGMENT
|
||||
}
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#define USING_MOBILE_RENDERER
|
||||
/* don't exceed 128 bytes!! */
|
||||
/* put instance data into our push content, not a array */
|
||||
layout(push_constant, std430) uniform DrawCall {
|
||||
|
|
|
@ -70,6 +70,21 @@ void light_compute(vec3 N, vec3 L, vec3 V, float A, vec3 light_color, bool is_di
|
|||
|
||||
mat4 inv_view_matrix = scene_data_block.data.inv_view_matrix;
|
||||
|
||||
#ifdef USING_MOBILE_RENDERER
|
||||
mat4 read_model_matrix = draw_call.transform;
|
||||
#else
|
||||
mat4 read_model_matrix = instances.data[instance_index_interp].transform;
|
||||
#endif
|
||||
|
||||
mat4 read_view_matrix = scene_data_block.data.view_matrix;
|
||||
|
||||
#undef projection_matrix
|
||||
#define projection_matrix scene_data_block.data.projection_matrix
|
||||
#undef inv_projection_matrix
|
||||
#define inv_projection_matrix scene_data_block.data.inv_projection_matrix
|
||||
|
||||
vec2 read_viewport_size = scene_data_block.data.viewport_size;
|
||||
|
||||
vec3 normal = N;
|
||||
vec3 light = L;
|
||||
vec3 view = V;
|
||||
|
|
Loading…
Reference in a new issue