为什么我的无符号字节需要两倍大?

Mik*_*ail 2 c++ opengl

我正在从Qt断开程序的渲染部分并将其升级到OpenGL 4.

我遇到了关于纹理的奇怪问题,我因为没有提供正确尺寸数据的glTexImage而遇到了段错误.这很奇怪,因为我很确定我正在提供正确尺寸的数据.

int n = 1*g_windowHeight*g_windowHeight;
//int n = 2*g_windowHeight*g_windowHeight; Doesn't segfault but doesn't make sense to me
auto data = (GLbyte*) malloc(n*sizeof(GLbyte));
glBindTexture(GL_TEXTURE_2D,textures[i]);
glTexImage2D(GL_TEXTURE_2D,0,GL_R8,g_windowWidth,g_windowHeight,0,GL_RED,GL_UNSIGNED_BYTE,data); //
Run Code Online (Sandbox Code Playgroud)

renderMan.exe中0x0000000180012212(ig4icd64.dll)的未处理异常:0xC0000005:访问冲突读取位置0x0000007035F7C000.

如果我使用GL_R8,为什么GL_R8需要每像素2个字节?

tro*_*foe 9

这是一个错字:

int n = 1*g_windowHeight*g_windowHeight;
Run Code Online (Sandbox Code Playgroud)

应该:

int n = 1*g_windowWidth*g_windowHeight;
//                ^^^^^
Run Code Online (Sandbox Code Playgroud)