【发布时间】:2011-06-24 07:23:18
【问题描述】:
我正在尝试通过以下 sn-p 将多个纹理(来自 8x8 *.bmp 图像)加载到多个 FBO:
glTexImage3D(GL_TEXTURE_2D_ARRAY_EXT, 0, GL_RGB8I_EXT, TEXTURE_WIDTH, TEXTURE_HEIGHT, TEXTURE_NUM, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
for( int i = 0; i < TEXTURE_NUM; i++ )
{
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RBO_ID[i]);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, TEXTURE_WIDTH, TEXTURE_HEIGHT);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO_ID[i]);
glFramebufferTextureLayerEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, TexArray_ID, 0, i);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, RBO_ID[i]);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}
checkGLErrors("begin check");
for ( int i = 0; i < TEXTURE_NUM; i++ )
{
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, FBO_ID[i]);
char fileName[32];
sprintf(fileName, "./img/%02d.bmp", i);
unsigned char* imgData;
imgData = loadBMP(fileName);
if (imgData)
printf("imgData %s is successfully loaded\n",fileName);
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, i, 8, 8, 1, GL_RGB, GL_UNSIGNED_BYTE, imgData);
checkGLErrors("end check");
free(imgData);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, NULL);
}
但是,我无法使用 glTexSubImage3D 函数附加这些纹理。 CheckGLErrors() 指示错误在以下行,说明“无效值”错误。
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, i, 8, 8, 1, GL_RGB, GL_UNSIGNED_BYTE, imgData);
阅读manual后,我认为错误与以下语句有关:
如果 xoffset w - b , yoffset h - b , or zoffset d - b ,则生成
GL_INVALID_VALUE,其中w 是 GL_TEXTURE_WIDTH,h 是 GL_TEXTURE_HEIGHT,d 是 GL_TEXTURE_DEPTH,b 是正在修改的纹理图像的边框宽度。请注意,w、h 和 d 包含两倍的边框宽度。
这让我不知道如何让这些纹理发挥作用。有任何想法吗?提前致谢。
【问题讨论】: