glDrawPixels访问违规读取位置

glDrawPixels Access violation reading location

本文关键字:读取 位置 访问 glDrawPixels      更新时间:2023-10-16

我正在尝试使用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);

访问冲突

但它不是按照我的预期输出。有人能帮帮我吗?

您告诉glDrawPixels您的数据是SIZExSIZE像素,每个像素有3个32位无符号整数类型的组件(GL_RGB)每个 (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包含(或指向)的实际内存相匹配。

给定OpenGL将期望每像素3个无符号整数!您可能希望使用GL_UNSIGNED_INT_8_8_8_8作为数据类型。