OpenGL se bloquea al vincular el programa, LG Nexus 4
Tengo otro error de controlador de OpenGL ES. Esta vez estoy tratando de compilar las siguientes líneas:
precision mediump float; varying highp vec2 textureCoordinate; void main() { highp vec4 color = texture2D(input0, textureCoordinate); vec3 color3 = color.rgb; vec2 tc = (2.0 * textureCoordinate) - 1.0; float d = dot(tc, tc); vec2 lookup = vec2(d, color3.r); .. .. }
Pero estoy consiguiendo después de la línea:
- Cómo pasar los datos correctos a un programa de shader OpenGL-ES 2.0
- Proporciona una vista previa de la cámara en una textura con destino GL_TEXTURE_2D
- Dónde almacenar código de sombreado en la aplicación para Android
- Cómo pasar la matriz int en el fragmento de fragmento de Android OpenGl
- Android glShaderBinary
GLES20.glLinkProgram(program);
"Supongo que sucede porque LG nexus 4 utiliza GPU Adreno, y también se bloquea para mí con el código de error 14 en un accidente diferente – usar demasiadas macros.
- Cómo crear una textura OpenGL de matriz de bytes en Android
- OpenGL ES 2.0 múltiples programas o múltiples Shaders o qué? ¿Como funciona?
- Simulación de swaps de paletas con Shaders OpenGL (en LibGDX)
- Cómo utilizar la cámara con Android OpenGL ES para trabajar?
- El algoritmo de ruido falla en Samsung Galaxy SIII (GLES)
- ¿Se descarta mal el rendimiento del programa en OpenGL?
- ¿Por qué mi programa de shader openGL para puntos tiene anillos de artefactos?
- Pasar atributos personalizados a un shader de fragmentos personalizado
Después de compilar el sombreado, utilizando glGetShaderiv
obtener el estado de la compilación de sombreado. Me gusta:
GLint compiled; glGetShaderiv(index, GL_COMPILE_STATUS, &compiled); //index is the shader value
A continuación, si compilado se devuelve como cero, obtenga primero la longitud de información y, a continuación, el mensaje de error como sigue:
GLint infoLen = 0; glGetShaderiv(index, GL_INFO_LOG_LENGTH, &infoLen); if(infoLen > 1) { char* infoLog = new char(infoLen); glGetShaderInfoLog(index, infoLen, NULL, infoLog); }
Compruebe infoLog
finalmente para ver el mensaje de error que regresó de la compilación de sombreado. Mensaje de error de segmentación en su mensaje original no da nada útil para resolver el problema.
Por lo que puedo ver de su extracto del código corto en su shader del fragmento usted no ha especificado la precisión del float
. En ES 2.0 debe especificar explícitamente la precisión del float
.
precision mediump float;
Por favor, lea sobre esto en las especificaciones , pág. 4.5.3 Calificadores de precisión por defecto . Shader puede funcionar sin especificar la precisión del float
en ciertos controladores OpenGL ES y puede fallar al compilar en otros.
Sin embargo, se necesita código fuente completo para averiguar la causa exacta de su problema.
Te sugiero que comience a comentar las partes del código de sombreado hasta que comience a compilar correctamente. De esta manera se reducirá una línea problemática (creo que incluso más rápido que esperar respuesta aquí en SO).