如何在C / OpenGL中从整数数组创建位图

时间:2009-11-29 21:26:24

标签: java c android opengl-es

我正在尝试将我的代码从Java移动到C,并且在尝试在C中找到一个可以获取整数数组并从中为OpenGL创建位图的函数时遇到了问题。在Java中,我使用了

bitmap = Bitmap.createBitmap( {int array name} , w, h, Config.RGB_565);

我可以在C中使用类似的功能,还是我可以使用的解决方法?

另外,如果重要的话,我正在为Android编程。

谢谢!

4 个答案:

答案 0 :(得分:3)

我并不是特别熟悉android但是如果我记得正确的OpenGL C绑定没有Bitmap结构。相反,各种位图函数(即glBindTexture())只需要使用GLuint指针(C等效于数组)。

在Java中,所有东西都是一个类,所以位图有一个与之关联的类,但是位图类主要只是一个实际包含图像的int数组的包装器(以及一些函数)。

在OpenGL中,我们经常使用glBindTexture函数绑定一个数组,然后其他纹理函数采用它所绑定的名称来引用OpenGL的正确“状态”。

另一方面,如果您尝试将此过程短路,则可以始终使用glTexImage2D

答案 1 :(得分:1)

我刚刚通过BMP格式的文档进行了编写this Python implementation。你应该能够轻松地将它移植到C语言。

答案 2 :(得分:0)

您正在寻找的功能只是glTextImage2D()。它将数据从数组上传到OpenGL。您可以指定您拥有和想要的源格式和目标格式,剩下的就完成了。

glBindTexture()一起使用以创建存储的可重复使用的纹理对象,因此您无需在每帧使用纹理数据之前上传纹理数据。

答案 3 :(得分:0)

以下是您的需求:

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , x_size, y_size, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)your_data );

x_size和y_size必须是2的幂。对于此代码,您需要x_size y_size 4字节整数的数组(或x_size y_size * 4字节)。如需测试,请尝试:

unsigned char data[32*32*4];

for( int i=0; i< sizeof(data); ++i) data[i]=rand();
// Don't forget to #include <stdlib.h>

glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA , 32, 32, 0, GL_RGBA , GL_UNSIGNED_BYTE, (GLvoid *)data );

其他可能的格式:GL_BGRA(针对不同的字节顺序),GL_RGB(如果您没有alpha)。使用glGenTextures / glBindTexture来记住纹理设置以供以后使用。