如何在C / OpenGL中从整数数组创建位图
题
我正在尝试将我的代码从Java移动到C,并且在尝试在C中找到一个可以获取整数数组并从中为OpenGL创建位图的函数时遇到了问题。在Java中,我使用了
<代码> bitmap = Bitmap.createBitmap({int array name},w,h,Config.RGB_565); 代码>
我可以在C中使用类似的功能,还是我可以使用的解决方法?
另外,如果重要的话,我正在为Android编程。
谢谢!
解决方案
我并不是特别熟悉android但是如果我记得正确的OpenGL C绑定没有Bitmap结构。相反,各种位图函数(即 glBindTexture()
)只需要使用GLuint指针(C等效于数组)。
在Java中,所有东西都是一个类,所以位图有一个与之关联的类,但是位图类主要只是实际包含图像的int数组的包装器(以及一些函数)。
在OpenGL中,我们经常将数组绑定到 glBindTexture 函数,然后其他纹理函数采用它所绑定的名称来引用OpenGL的正确“状态”。
另一方面,如果您试图短路此过程,您可以随时使用 glTexImage2D
其他提示
我前一段时间通过BMP格式的文档来编写这篇Python实施。你应该能够轻松地将它移植到C语言。
您正在寻找的功能只是 glTextImage2D () 代码>。它将数据从数组上传到OpenGL。您可以指定您拥有和想要的源格式和目标格式,剩下的就完成了。
与一起使用 glBindTexture()
创建一个存储的可重复使用的纹理对象,因此在每帧使用之前不需要上传纹理数据。
以下是您的需求:
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来记住纹理设置以供以后使用。