¿Cómo puedo declarar la versión de OpenGL en shaders en Android?
Estoy experimentando con OpenGL ES 3.0 y encontré la siguiente declaración en la hoja de referencia rápida:
"#version 300 es" debe aparecer en la primera línea de un programa de shader escrito en GLSL ES versión 3.00. Si se omite, el sombreado se tratará como la versión de orientación 1.00.
Así que traté de añadir esto al principio de mis shaders, pero que sólo resultó en el error
Se produjo un error en el enlace debido a un sombreado de vértices no válido.
Según lo informado por .glGetProgramInfoLog
. Si quito la primera línea con la instrucción "#version 300 gl", el shader compila y funciona.
Este es el código de mi vertex shader
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";
También agregué la instrucción de versión al vértice y el fragmento shader, y todavía consigo el mismo error.
Llamo a setEGLContextClientVersion(3)
en mi GLSurfaceView, y he añadido <uses-feature android:glEsVersion="0x00030000" android:required="true" />
a mi manifiesto para indicar que la aplicación requiere OpenGL ES 3.0.
¿Estoy leyendo la documentación de OpenGL ES mal y no necesito agregar esta declaración de versión? Si necesito agregarlo, ¿qué estoy haciendo mal que siempre da lugar a un error?
- OpenGL ES 2.0 Error al asignar correctamente el atributo de color
- Problema de opengl de Android (extraño)
- No se puede encontrar el ejemplo adecuado para la clase de sprite de OpenGL 2d que no usa GL11Ext para dibujar
- Conversión de YUV a RGB por fragment shader
- Cómo hacer un Libgdx Bitmapfont de modo que es el color de los píxeles es la inversa del fondo?
- Rutas de dibujo y aceleración de hardware
- Transparencia de OpenGL ES 2.0 mediante pruebas alfa en shader
- Uso de muPDF con efecto curl / flip
Al leer la especificación GLSL ES3.0 se enumeran "atributo" y "variable" como palabras clave reservadas que resultarán en un error.
En GLES3, debe calificar las variables de entrada con "in" y las variables de salida con "out".
Así que en el sombreador de vértices,
attribute -> in varying -> out
Y en el fragmento shader
varying -> in
Sección 4.3 en la especificación (calificadores de almacenamiento) tiene todos los detalles.
- Android 5: botón debajo de la barra de softnavigation (herencia de Showcaseview)
- ¿Alguien sabe cómo usar onActivityReenter correctamente?