diff options
Diffstat (limited to 'drivers/gles3/shader_gles3.cpp')
-rw-r--r-- | drivers/gles3/shader_gles3.cpp | 37 |
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 |