summaryrefslogtreecommitdiffstats
path: root/drivers/gles3/shader_gles3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gles3/shader_gles3.cpp')
-rw-r--r--drivers/gles3/shader_gles3.cpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/drivers/gles3/shader_gles3.cpp b/drivers/gles3/shader_gles3.cpp
index dfc500ea83..51fed4da98 100644
--- a/drivers/gles3/shader_gles3.cpp
+++ b/drivers/gles3/shader_gles3.cpp
@@ -36,6 +36,8 @@
#include "core/io/dir_access.h"
#include "core/io/file_access.h"
+#include "drivers/gles3/rasterizer_gles3.h"
+
static String _mkid(const String &p_id) {
String id = "m_" + p_id.replace("__", "_dus_");
return id.replace("__", "_dus_"); //doubleunderscore is reserved in glsl
@@ -150,12 +152,12 @@ RID ShaderGLES3::version_create() {
}
void ShaderGLES3::_build_variant_code(StringBuilder &builder, uint32_t p_variant, const Version *p_version, StageType p_stage_type, uint64_t p_specialization) {
-#ifdef GLES_OVER_GL
- builder.append("#version 330\n");
- builder.append("#define USE_GLES_OVER_GL\n");
-#else
- builder.append("#version 300 es\n");
-#endif
+ if (RasterizerGLES3::is_gles_over_gl()) {
+ builder.append("#version 330\n");
+ builder.append("#define USE_GLES_OVER_GL\n");
+ } else {
+ builder.append("#version 300 es\n");
+ }
for (int i = 0; i < specialization_count; i++) {
if (p_specialization & (uint64_t(1) << uint64_t(i))) {
@@ -199,11 +201,11 @@ void ShaderGLES3::_build_variant_code(StringBuilder &builder, uint32_t p_variant
// Default to highp precision unless specified otherwise.
builder.append("precision highp float;\n");
builder.append("precision highp int;\n");
-#ifndef GLES_OVER_GL
- builder.append("precision highp sampler2D;\n");
- builder.append("precision highp samplerCube;\n");
- builder.append("precision highp sampler2DArray;\n");
-#endif
+ if (!RasterizerGLES3::is_gles_over_gl()) {
+ builder.append("precision highp sampler2D;\n");
+ builder.append("precision highp samplerCube;\n");
+ builder.append("precision highp sampler2DArray;\n");
+ }
const StageTemplate &stage_template = stage_templates[p_stage_type];
for (uint32_t i = 0; i < stage_template.chunks.size(); i++) {
@@ -510,6 +512,11 @@ String ShaderGLES3::_version_get_sha1(Version *p_version) const {
hash_build.append("[custom_defines:" + itos(i) + "]");
hash_build.append(p_version->custom_defines[i].get_data());
}
+ if (RasterizerGLES3::is_gles_over_gl()) {
+ hash_build.append("[gl]");
+ } else {
+ hash_build.append("[gles]");
+ }
return hash_build.as_string().sha1_text();
}
@@ -523,8 +530,8 @@ bool ShaderGLES3::_load_from_cache(Version *p_version) {
#ifdef WEB_ENABLED // not supported in webgl
return false;
#else
-#ifdef GLES_OVER_GL
- if (glProgramBinary == NULL) { // ARB_get_program_binary extension not available
+#if !defined(ANDROID_ENABLED) && !defined(IOS_ENABLED)
+ if (RasterizerGLES3::is_gles_over_gl() && (glProgramBinary == NULL)) { // ARB_get_program_binary extension not available.
return false;
}
#endif
@@ -596,8 +603,8 @@ void ShaderGLES3::_save_to_cache(Version *p_version) {
#ifdef WEB_ENABLED // not supported in webgl
return;
#else
-#ifdef GLES_OVER_GL
- if (glGetProgramBinary == NULL) { // ARB_get_program_binary extension not available
+#if !defined(ANDROID_ENABLED) && !defined(IOS_ENABLED)
+ if (RasterizerGLES3::is_gles_over_gl() && (glGetProgramBinary == NULL)) { // ARB_get_program_binary extension not available.
return;
}
#endif