Експериментирам с OpenGL ES 3.0 и намерих следното твърдение в листа с бързи справки:
„#version 300 es“ трябва да се появи в първия ред на шейдър програма, написана на GLSL ES версия 3.00. Ако е пропуснато, шейдърът ще се третира като насочен към версия 1.00.
Така че се опитах да добавя това в началото на моите шейдъри, но това доведе само до грешката
Връзката е неуспешна поради невалиден вертекс шейдър.
както се съобщава от .glGetProgramInfoLog
. Ако премахна първия ред с израза "#version 300 gl", шейдърът се компилира и работи.
Това е кодът на моя вертекс шейдър
private final String vertexShaderCode =
"#version 300 es \n" +
"uniform mat4 uMVPMatrix; \n" +
"attribute vec2 a_TexCoordinate; \n" +
"attribute vec4 vPosition; \n" +
"varying vec2 v_TexCoordinate; \n" +
"void main() { \n" +
" v_TexCoordinate = a_TexCoordinate; \n" +
" gl_Position = uMVPMatrix * vPosition; \n" +
"} \n";
Добавих също оператора за версия към върха и фрагментния шейдър и все още получавам същата грешка.
Извиквам setEGLContextClientVersion(3)
в моя GLSurfaceView и добавих <uses-feature android:glEsVersion="0x00030000" android:required="true" />
към моя манифест, за да покажа, че приложението изисква OpenGL ES 3.0.
Грешно ли чета документацията на OpenGL ES и не е нужно да добавям това изявление за версия? Ако трябва да го добавя, какво правя погрешно, че винаги води до грешка?