1

我正在尝试将我在 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 类的缓冲区将整数像素数组中的一系列颜色绑定到纹理。

4

1 回答 1

0

我认为这可能是如何解决它:


初始化


    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/

于 2013-01-21T07:53:10.403 回答