예제 #1
0
 internal static void initializeTexture(int name, int id, int width, int height)
 {
     GLES20.glActiveTexture(name);
     GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, id);
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
     GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
     GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_LUMINANCE, width, height, 0, GLES20.GL_LUMINANCE, GLES20.GL_UNSIGNED_BYTE, null);
 }
예제 #2
0
            internal virtual void updateTextures(Frame frame)
            {
                int width       = frame.Width;
                int height      = frame.Height;
                int half_width  = (width + 1) >> 1;
                int half_height = (height + 1) >> 1;
                int y_size      = width * height;
                int uv_size     = half_width * half_height;

                ByteBuffer bb = frame.Buffer;

                // If we are reusing this frame, make sure we reset position and
                // limit
                bb.clear();

                if (bb.remaining() == y_size + uv_size * 2)
                {
                    bb.position(0);

                    GLES20.glPixelStorei(GLES20.GL_UNPACK_ALIGNMENT, 1);
                    GLES20.glPixelStorei(GLES20.GL_PACK_ALIGNMENT, 1);

                    GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
                    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureIds[0]);
                    GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, width, height, GLES20.GL_LUMINANCE, GLES20.GL_UNSIGNED_BYTE, bb);

                    bb.position(y_size);
                    GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
                    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureIds[1]);
                    GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, half_width, half_height, GLES20.GL_LUMINANCE, GLES20.GL_UNSIGNED_BYTE, bb);

                    bb.position(y_size + uv_size);
                    GLES20.glActiveTexture(GLES20.GL_TEXTURE2);
                    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureIds[2]);
                    GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, half_width, half_height, GLES20.GL_LUMINANCE, GLES20.GL_UNSIGNED_BYTE, bb);
                }
                else
                {
                    mTextureWidth  = 0;
                    mTextureHeight = 0;
                }
            }