2017-03-04 49 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