Vertex Shader no puede compilar. No puedo encontrar el error
EDITAR:
Parece que el error fue, que no se me permite compilar el shader en un hilo separado? Desde que he estado presionando el objeto de carga en un entorno de subprocesos, el mensaje de error surgió. Simplemente no creo que podría ser la razón de ello.
- Cómo salvar SurfaceTexture como bitmap
- No se puede compilar shader conocido por ser bueno en android
- GlCreateShader y glCreateProgram fallan en android
- Android se congela en OpenGL | ES (la CPU puede estar vinculada.
- Entorno de práctica recomendado para OpenGL ES 2.0?
Mi sombreador vértice actual falla al compilar por alguna razón. El mensaje de error que estoy recibiendo no existe, y no puedo encontrar el error.
uniform mat4 u_MVPMatrix; uniform mat4 u_MVMatrix; uniform vec3 u_CameraPos; attribute vec4 a_Position; attribute vec4 a_Color; attribute vec3 a_Normal; varying vec3 v_Position; varying vec4 v_Color; varying vec3 v_Normal; varying vec3 v_CameraPosition; varying vec4 v_Ambient; void main() { v_Position = vec3(u_MVMatrix * a_Position); v_Color = a_Color; v_Normal = vec3(u_MVMatrix * vec4(a_Normal, 0.0)); //v_CameraPosition = vec3(u_MVMatrix * vec4(u_CameraPos, 0.0)); // taken out to debug v_CameraPosition = u_CameraPos; gl_Position = u_MVPMatrix * a_Position; }
El fragmento shader para este es:
precision mediump float; uniform vec3 u_LightPos; uniform vec4 u_Light; uniform vec4 u_Ambient; uniform vec3 u_LightDirection; uniform vec3 u_CameraPos; varying vec4 v_Ambient; varying vec3 v_Position; varying vec4 v_Color; varying vec3 v_Normal; varying vec3 v_CameraPosition; // The entry point for our fragment shader. void main() { float distance = length(u_LightPos - v_Position); vec3 lightVector = normalize(u_LightPos - v_Position); float diffuse = max(dot(v_Normal, lightVector), 0.1); diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance))); // specular lighting removed due to debugging gl_FragColor = v_Color * (u_Ambient + (diffuse * u_Light)); }
"Trying" para obtener un mensaje de error:
Log.d(TAG, "Compilation -> " + GLES20.glGetShaderInfoLog(iShader));
Devuelve una cadena vacía del método, así como
Log.e(TAG, "Vertex Shader Failed -> " + GLES20.glGetError());
Está regresando simplemente 0.
Estoy desarrollando para OpenGL ES 2.0 para Android, si hay alguna restricción para Android que no conozco?
¡Gracias por cualquier ayuda!
- Transparencia de OpenGL ES 2.0 mediante pruebas alfa en shader
- OpenGL ES 2.0 texture2D sesgo / lod
- Android.grapics.matrix to OpenGL 2.0 ES traducción de la textura
- ¿Es posible establecer un valor inicial para un uniforme de sombreado? (Android, OpenGL ES 2.0)
- Dibujo de un gradiente en Libgdx
- Android y OpenGL dan marco negro en el inicio
- Aplicando textura a Cubo, textura diferente en cada cara de cubo
- Escena de OpenGL con fondo transparente + widgets nativos por debajo y por encima
Los contextos OpenGL sólo funcionan por subproceso, por lo que son correctos. Si desea crear un subproceso de carga de fondo, no sólo debe crear un nuevo contexto en ese subproceso, sino también asegurarse de que comparte recursos (el tercer parámetro en eglCreateContext ). Tenga en cuenta que los recursos de contexto de uso compartido pueden no funcionar en algunos dispositivos (antiguos).
- Android – ¿Cómo conozco todos los métodos que requieren un cierto permiso?
- Robolectric es-singlepane (/ solo-fragmento) -test