Opengl NPOT纹理分配失败,对应数据精确

Opengl NPOT纹理分配失败,对应数据精确,opengl,textures,Opengl,Textures,据我所知,OpenGL从3.0开始就高度支持NPOT纹理。现在我面临一个奇怪的现象,即NPOT纹理无法分配精确的对应数据。言简意赅。我的测试代码如下 glGenTextures(1, &texVoxels); glBindTexture(GL_TEXTURE_3D, texVoxels); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_3D, GL_

据我所知,OpenGL从3.0开始就高度支持NPOT纹理。现在我面临一个奇怪的现象,即NPOT纹理无法分配精确的对应数据。言简意赅。我的测试代码如下

glGenTextures(1, &texVoxels);
glBindTexture(GL_TEXTURE_3D, texVoxels);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);

int width = 513;
int height = 513;
int depth = 513;
unsigned char *data = new unsigned char[width*height*depth];
memset(data, 0, sizeof(unsigned char)*width*height*depth);

glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE8, width, height,depth, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, data);

delete []data;
data = NULL;
正如上面显示的代码,我需要分配一个2^N+1的NPOT立方体纹理。但程序将在glTexImage3D()上退出错误。我认为,这个错误是由“数据的大小小于所需的纹理”造成的。因为如果我分配的数据足够大,程序就会通过

我如何使用NPOT纹理并分配这样的数据?即使当数据的大小足够大时,程序也会通过,但我真的不确定数据如何与纹理位置准确对应


另外,我的图形卡是quadro fx 4800,它支持OpenGL 3.3

您可能需要设置像素存储参数。最重要的是行对齐。尝试添加一个

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

在调用
glTexImage3D

之前,您的卡支持3.3,但您是否创建了一个3.0+OpenGL上下文?@Calvin1602:NPO2纹理实际上是受支持的,因为OpenGL-2,所以这不是上下文版本的问题。哦,天哪,是的!我以前对这件事不太了解。谢谢。