2017-03-04 70 views
1

在立方体贴图阵列纹理上调用glTextureStorage3D时,我得到一个GL_INVALID_VALUE。我的代码是很抽象的,但反倾销从纹理制作到GL错误的原始GL代码归结为:glTextureStorage3D与立方体贴图阵列上的GL_INVALID_VALUE

[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 GL 4.4上下文375.70驱动程序),或我在做一些完全错误的,但那么我完全丧失了什么。

有什么想法?

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

+0

'glTextureStorage3D'和'glCreateTextures'是OpenGL 4.5的函数,但是您正在创建4.4上下文。 – SurvivalMachine

+0

@SurvivalMachine:可能4.4是要求的格式,但驱动程序给了4.5,否则'glCreateTextures'甚至不能工作。 – peppe

+0

@peppe Yup就是这样!发现虽然一丝不苟地阅读glTexStorage3D的整个规格。标记为已解决:) – xtrium

回答

5

问题是depth不能被6整除。当你使用cubemap数组时,你不处理图层,你处理“图层”。请参阅here

相关问题