gpt4 book ai didi

qt - glTexImage3D 在 QT 中崩溃

转载 作者:行者123 更新时间:2023-12-04 14:08:47 26 4
gpt4 key购买 nike

以下是部分代码。编译的时候没有问题,但是执行的时候就崩溃了。它打破了 glTexImage3D 的行。 Qt 版本 4.5.3,类 "opengl"继承自 QGLWidget。

void opengl::initializeGL()
{
GLenum err = glewInit();
create_volumetexture();
}

void opengl::create_volumetexture()
{
int w = 256, h = 256, d = 225;
size_t size = w * h * d;

if (dataRGBA)
{
delete dataRGBA;
dataRGBA=NULL;
}
dataRGBA=new GLubyte[4*size];
for (int i=0; i<size; i++)
{
dataRGBA[4*i]=200;
dataRGBA[4*i+1]=0;
dataRGBA[4*i+2]=0;
dataRGBA[4*i+3]=100;
}

glGenTextures(1, &volume_texture);
// bind 3D texture target
glBindTexture(GL_TEXTURE_3D, volume_texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
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_BORDER);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER);

glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glTexImage3D(GL_TEXTURE_3D_EXT, 0, GL_RGBA, w, h, d, 1, /*GL_LUMINANCE*/GL_RGBA, GL_UNSIGNED_BYTE,dataRGBA);

}

最佳答案

您为 border 参数提供了一个非零值,但为此分配的缓冲区并没有考虑到它,因此 glTexImage3D 会发生缓冲区读取溢出。

此外,d 不是 2 的幂,因此您遇到了另一个问题。您可以使用带有空指针的 glTexImage3D 来初始化纹理,并使用 glTexSubImage3D 来填充实际内容——传递给 glTexSubImage 的数据也可以是非 2 的幂格式(但纹理本身必须用 的幂初始化2 个维度……然后还有边界)。

关于qt - glTexImage3D 在 QT 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com