This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Shader compilation issue with ARM GLES3.1 Emulator ver 2.2

I am working on GLES program using ARM GLES3.1 Emulator ver 2.2.

glShaderSource is giving 'GL_INVALID_OPERATION' error if shader is of following form

============================================

#ifndef GL_ES

#version 400 core

#define mediump

in vec3 position;

void main() {

    gl_Position = vec4(position, 1.0);

}

#else

attribute vec3 position;

void main() {

    gl_Position = vec4(position, 1.0);

}

#endif

=======================================================

On console it writes FATAL - GLES: <gles::GLES31Api::glShaderSource 126> Invalid version detected.

It seems it is due to line "#version 400 core", but I wonder why it should go to this line when GL_ES is defined.

  • Hi Sunil,

    I think you shader is not "exactly" conformant to OpenGL ES Language specification.

    According to Chapter 3.3. Version Declaration from The OpenGL ES Shading Language specification:

    "The #version directive must be present in the first line of a shader and must be followed by a newline. It

    may contain optional white-space as specified below but no other characters are allowed. The directive is

    only permitted in the first line of a shader."

    If you are targeting OpenGL ES, that would mean should not start a shader with #ifndef GL_ES statement if you plan to use #version directive in it.

    We know that some shader language compilers have less strict rules and not really follow official specification. This is where our OpenGL ES Emulator differs a bit.

    We've captured your issue and we will consider whether we should relax our shader compilation validation in the Emulator for one of next possible releases. At this point GL_INVALID_OPERATION is the correct and conformant result.