我正在尝试使用OpenGL函数glDrawPixels()
#define SIZE 480
unsigned int rgbPixels[SIZE][SIZE]
...
glDrawPixels(SIZE, SIZE, GL_RGB, GL_UNSIGNED_INT, rgbPixels);
如果我sizeof(rgbpixels)
,则返回921600,即480 * 480 * 4。
我试过GL_RGBA
但没有好处。最后,我在屏幕上看到了一些内容而没有使用glDrawPixels(SIZE, SIZE*0.81, GL_RGB, GL_UNSIGNED_INT, rgbPixels);
但它不符合我的预期输出。在这种情况下,有人可以帮助我吗?
答案 0 :(得分:4)
您告诉glDrawPixels
您的数据是SIZExSIZE
像素,每个像素有3个组件(GL_RGB
)32位无符号整数类型每个( GL_UNSIGNED_INT
)。如果rgbPixels
不是这种情况(当你说它只是SIZE*SIZE*4
而不是所需的SIZE*SIZE*3*4
时可能不是这样),那么这可能会导致访问违规或其他未定义的行为。
如果您说rgbPixels
的大小为SIZE*SIZE*4
,那么我猜每个像素都包含4个字节,每个字节都是一个颜色组件。如果是这种情况,则需要
glDrawPixels(SIZE, SIZE, GL_RGBA, GL_UNSIGNED_BYTE, rgbPixels);
请记住glDrawPixels
的所有参数都告诉OpenGL指针参数(rgbPixels
)使用了多少内存以及它的布局格式。所以那些当然必须匹配rgbPixels
包含(或指向)的实际内存。
答案 1 :(得分:1)
正如给定的OpenGL预计每个像素有3个无符号整数!您可能希望使用GL_UNSIGNED_INT_8_8_8_8
作为数据类型。