summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJuan Linietsky <juan@godotengine.org>2018-12-19 10:24:58 -0300
committerJuan Linietsky <juan@godotengine.org>2018-12-19 10:25:45 -0300
commitaa819a85381dc256e4e1a59dd62d5da84346e3ea (patch)
treec475394a1a342cab0a1a070982a86eac9b6b18e4 /drivers
parenta06f8ca6b9838c587841afc17d990646ac9997e4 (diff)
Properly support light shaders in GLES2, fixes #21651
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gles2/shader_gles2.cpp32
-rw-r--r--drivers/gles2/shaders/scene.glsl1
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