diff options
author | Juan Linietsky <juan@godotengine.org> | 2018-12-19 10:24:58 -0300 |
---|---|---|
committer | Juan Linietsky <juan@godotengine.org> | 2018-12-19 10:25:45 -0300 |
commit | aa819a85381dc256e4e1a59dd62d5da84346e3ea (patch) | |
tree | c475394a1a342cab0a1a070982a86eac9b6b18e4 /drivers/gles2 | |
parent | a06f8ca6b9838c587841afc17d990646ac9997e4 (diff) |
Properly support light shaders in GLES2, fixes #21651
Diffstat (limited to 'drivers/gles2')
-rw-r--r-- | drivers/gles2/shader_gles2.cpp | 32 | ||||
-rw-r--r-- | drivers/gles2/shaders/scene.glsl | 1 |
2 files changed, 18 insertions, 15 deletions
diff --git a/drivers/gles2/shader_gles2.cpp b/drivers/gles2/shader_gles2.cpp index 84bd413abb..c0d62117b9 100644 --- a/drivers/gles2/shader_gles2.cpp +++ b/drivers/gles2/shader_gles2.cpp @@ -364,14 +364,14 @@ ShaderGLES2::Version *ShaderGLES2::get_current_version() { strings.push_back(fragment_code1.get_data()); if (cc) { - code_string = cc->fragment.ascii(); + code_string = cc->light.ascii(); strings.push_back(code_string.get_data()); } strings.push_back(fragment_code2.get_data()); if (cc) { - code_string2 = cc->light.ascii(); + code_string2 = cc->fragment.ascii(); strings.push_back(code_string2.get_data()); } @@ -588,22 +588,24 @@ void ShaderGLES2::setup( fragment_code0 = code.substr(0, cpos).ascii(); code = code.substr(cpos + globals_tag.length(), code.length()); - cpos = code.find(code_tag); + cpos = code.find(light_code_tag); - if (cpos == -1) { - fragment_code1 = code.ascii(); - } else { + String code2; + + if (cpos != -1) { fragment_code1 = code.substr(0, cpos).ascii(); - String code2 = code.substr(cpos + code_tag.length(), code.length()); - - cpos = code2.find(light_code_tag); - if (cpos == -1) { - fragment_code2 = code2.ascii(); - } else { - fragment_code2 = code2.substr(0, cpos).ascii(); - fragment_code3 = code2.substr(cpos + light_code_tag.length(), code2.length()).ascii(); - } + code2 = code.substr(cpos + light_code_tag.length(), code.length()); + } else { + code2 = code; + } + + cpos = code2.find(code_tag); + if (cpos == -1) { + fragment_code2 = code2.ascii(); + } else { + fragment_code2 = code2.substr(0, cpos).ascii(); + fragment_code3 = code2.substr(cpos + code_tag.length(), code2.length()).ascii(); } } } diff --git a/drivers/gles2/shaders/scene.glsl b/drivers/gles2/shaders/scene.glsl index 30dc55cc4c..aba283970a 100644 --- a/drivers/gles2/shaders/scene.glsl +++ b/drivers/gles2/shaders/scene.glsl @@ -1091,6 +1091,7 @@ void light_compute( inout vec3 diffuse_light, inout vec3 specular_light) { + //this makes lights behave closer to linear, but then addition of lights looks bad //better left disabled |