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

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.

  • ¿Por qué mi programa de shader openGL para puntos tiene anillos de artefactos?
  • OpenGL ES 2.0 múltiples programas o múltiples Shaders o qué? ¿Como funciona?
  • LibGDX - Shader trabajando en el escritorio pero no en Android
  • ¿Se descarta mal el rendimiento del programa en OpenGL?
  • Aplicando textura a Cubo, textura diferente en cada cara de cubo
  • OpenGL se bloquea al vincular el programa, LG Nexus 4
  • Pasar datos adicionales para fragmentar el shader a través de VBO - DynamicSpriteBatch
  • Shader para Android OpenGL ES
  • Android glShaderBinary
  • El algoritmo de ruido falla en Samsung Galaxy SIII (GLES)
  • Dónde almacenar código de sombreado en la aplicación para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.