我正在尝试将我的代码从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来记住纹理设置以供以后使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top