Cómo pasar la matriz int en el fragmento de fragmento de Android OpenGl
Soy muy nuevo en OpenGl y shaders en general. Quiero utilizar una matriz int estática de mi código java en el fragmento shader para manipular el color de la cámara. ¿Hay una manera de pasar en mi matriz del int al shader o apenas tener el shader pueda tener acceso a mi arsenal de alguna manera?
Gracias, Mike
- Proporciona una vista previa de la cámara en una textura con destino GL_TEXTURE_2D
- Android: TextView dañado usando .setShader ()
- Simulación de swaps de paletas con Shaders OpenGL (en LibGDX)
- GlCreateShader y glCreateProgram fallan en android
- Cómo crear una textura OpenGL de matriz de bytes en Android
- Cómo utilizar la cámara con Android OpenGL ES para trabajar?
- Cómo pasar los datos correctos a un programa de shader OpenGL-ES 2.0
- Vertex Buffer Objects (VBO) no funciona en Android 2.3.3, con GLES20
- Cómo renderizar la imagen de la cámara YUV-NV21 de Android en el fondo en libgdx con OpenGLES 2.0 en tiempo real?
- Intercambiar píxeles de MainTex con otras texturas a través de la superficie Shader (Unity)
- Creación de shaders OpenGL en NativeActivity
- ¿Cómo acceder a otro vértice en un programa de sombreado de vértices en opengl es 2?
- Utilizar glVertexAttribPointer y glDrawElements para extraer de un buffer de vértice empaquetado
La forma correcta de utilizar una matriz llamada estática dentro de su código de sombreado es pasarlo como Uniforme:
http://www.opengl.org/wiki/GLAPI/glUniform
Dentro de su código de sombreado se especifica que necesita un array externo:
uniform int colors[3]; // Specify an array of 3 integers
dentro de su código java use esto:
int array[3] = {0, 1, 2}; int location = GLES20.glGetUniformLocation(program_id, "colors"); GLES20.glUniform1iv(location, 3, array, 0);
Puesto que usted está intentando manipular el color de la cámara, asumo que usted está intentando pasar una pequeña arsenal en el fragmento shader (probablemente 3 o 4 enteros).
Debido a que probablemente sólo hay una cámara con el mismo color para todos los fragmentos, la forma más fácil de pasar los datos es usar un uniforme . En su fragmento declarar un uniforme:
uniform vec4 cameraColor;
y luego en su código Java, obtener la ubicación del uniforme y pasar los datos a él (esto es código C + +, el código Java puede ser un poco diferente):
GLint uniColorLocation = glGetUniformLocation( shaderProgram, "cameraColor" ); glUniform4i( uniColorLocation, array[0], array[1], array[2], array[3] );
Si desea pasar muchos colores a un fragmento shader, usa fríos los atributos de fragmento (ins) para pasar los datos. En el código Java se utilizan llamadas tales como glVertexAttribPointer
y glBufferData
para lograr esto. Otra opción es utilizar datos de textura para pasar información a los shaders. Aquí, un solo texel podría corresponder al color de la cámara de un objeto.
- Android – ¿Por qué se muestra el TextView con una altura?
- Cómo puedo bloquear la orientación de un dispositivo por código