Use highp precision for gles2 shader uniforms if not explicitly set.

The use of different default precision values (highp in vertex; mediump
in fragment) for uniform variables caused the shader program to not link properly on some android
devices/emulators.
This commit is contained in:
Marcus Brummer 2019-05-19 21:59:55 +02:00
parent d111d59640
commit 502dbc7c4a
1 changed files with 7 additions and 2 deletions

View File

@ -316,9 +316,14 @@ String ShaderCompilerGLES2::_dump_node_code(SL::Node *p_node, int p_level, Gener
for (Map<StringName, SL::ShaderNode::Uniform>::Element *E = snode->uniforms.front(); E; E = E->next()) {
StringBuffer<> uniform_code;
uniform_code += "uniform ";
// use highp if no precision is specified to prevent different default values in fragment and vertex shader
SL::DataPrecision precision = E->get().precision;
if (precision == SL::PRECISION_DEFAULT) {
precision = SL::PRECISION_HIGHP;
}
uniform_code += _prestr(E->get().precision);
uniform_code += "uniform ";
uniform_code += _prestr(precision);
uniform_code += _typestr(E->get().type);
uniform_code += " ";
uniform_code += _mkid(E->key());