如何使用Android NDK将整数颜色的像素数组绑定到纹理?

我正在尝试将Android上的Java OpenGL代码移植到Native SDK,我需要一个IntBuffer实现。

基本上我在Java中将任意整数RGBA像素颜色数组加载到纹理中是:

// pixel array pixelIntArray = new int[width * height]; bb = ByteBuffer.allocateDirect(pixelIntArray.length * 4); bb.order(ByteOrder.nativeOrder()); // native buffer pixelBuffer = bb.asIntBuffer(); // push integer array of pixels into buffer pixelBuffer.put(pixelIntArray); pixelBuffer.position(0); // bind buffer to texture gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, width, height, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, pixelBuffer); 

在C中,我可以使用缓冲区将纹理推送到四边形。

目前我只是将它绑定到C中的pixelIntArray,纹理变形。

基本上我需要能够通过类似于Java的NIO类的缓冲区将整数像素数组中的一系列颜色绑定到纹理。

我想这可能是如何解决它:


初始化


  int length = width * height; int* pixels = (int*) malloc(sizeof(int) * length); unsigned char * buffer = (unsigned char*) malloc(sizeof(char) * length * 4); 

复制到缓冲区


  int i, j; for (i = 0; i < length; i++) { j = 4 * i; buffer[j] = (char) (pixels[i] & 0xFF); buffer[j + 1] = (char) (pixels[i] >> 8 & 0xFF); buffer[j + 2] = (char) (pixels[i] >> 16 & 0xFF); buffer[j + 3] = (char) (pixels[i] >> 24 & 0xFF); } 

资源


来自: http : //www.c-sharpcorner.com/Forums/Thread/32972/