进行初始化
我正试图将我的Java OpenGL代码移植到Android上的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);
,这样我就可以使用缓冲区将纹理推送到quad。
目前我只是把它绑定到我的pixelIntArray在C和纹理失真出来。
基本上,我需要能够通过类似于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/