c++ - 带有立方体贴图数组的 glTextureStorage3D 上的 GL_INVALID_VALUE

标签 c++ opengl 3d

在立方体贴图数组纹理上调用 glTextureStorage3D 时,我得到一个 GL_INVALID_VALUE。我的代码非常抽象,但是将纹理创建中的原始 gl 代码转储到 gl 错误归结为:

[SafeGL DUMP] glCreateTextures(glTargets[uint32_t(type)], 1, &id_) // glTargets[uint32_t(type)] = GL_TEXTURE_CUBE_MAP_ARRAY
[SafeGL DUMP] glTextureParameteri(id_, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)
[SafeGL DUMP] glTextureParameteri(id_, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
[SafeGL DUMP] glTextureStorage3D(id_, mipLevels, glFormats[uint32_t(format_)], width, height, depth) // mipLevels = 1, glFormats[uint32_t(format_)] = GL_RG16F, width = 1024, height = 1024, depth = 4
/!\ GL ERROR 501: GL_INVALID_VALUE -- Breaking to debugger.

GL 规范指定“如果宽度、高度或深度为负数,则会生成 INVALID_VALUE 错误。” 除了在我的情况下不是...

我唯一的猜测是,我要么遇到了特定于供应商的未记录错误(nvidia 375.70 驱动程序上的 GL 4.4 上下文),要么我做的事情完全错误,但我完全不知道是什么.

有什么想法吗?

编辑:刚刚将驱动程序更新到 378.66,但无济于事。

最佳答案

问题是 depth 不能被 6 整除。当您使用立方体贴图数组时,您不处理层,而是处理“layerfaces”。

另见 here .

关于c++ - 带有立方体贴图数组的 glTextureStorage3D 上的 GL_INVALID_VALUE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42596547/

相关文章:

c++ - 使用 c++ STL/Boost 而不是 system() 调用重写这个简单的函数?

c++ - 如何在 "header file (.h)"中的现有 "C++ Project"中创建新的 "Microsoft Visual Studio Community 2015"?

c++ - 返回不准确的鼠标坐标

math - 检查平面上的点在哪一侧

graphics - 3D图形中的近剪裁距离和远剪裁距离是什么?

c++ - vtk c++ 从 contourfilter 更新轮廓

c++ - 为 float 定义值特征

c++ - QMatrix4x4 模型 View 投影 OpenGL 无法获取要渲染的场景

c++ - OpenGL,如何旋转彼此独立的对象?

math - 如何从3D向量获得偏航,俯仰和横滚