Opengl 如何渲染到立方体贴图?

Opengl 如何渲染到立方体贴图?,opengl,glsl,Opengl,Glsl,我正在尝试渲染到立方体贴图,我在此处找到了说明: 我按照上面的方法将立方体贴图的一个面绑定到fbo,但是得到了一个错误GL_FRAMEBUFFER_UNSUPPORTED_EXT。我想知道这是因为我的图形卡不支持此功能还是我的代码中有一些错误 我是否可以渲染6个单独的2d fbo纹理并使用这些纹理创建立方体贴图 谢谢定义了您可以使用的函数isExtensionSupported()。在运行时测试代码所依赖的所有扩展是否存在是(非常)好的做法 仅仅因为它是构建的,即您的头定义了所需的扩展,并不意

我正在尝试渲染到立方体贴图,我在此处找到了说明:

我按照上面的方法将立方体贴图的一个面绑定到fbo,但是得到了一个错误GL_FRAMEBUFFER_UNSUPPORTED_EXT。我想知道这是因为我的图形卡不支持此功能还是我的代码中有一些错误

我是否可以渲染6个单独的2d fbo纹理并使用这些纹理创建立方体贴图

谢谢

定义了您可以使用的函数
isExtensionSupported()
。在运行时测试代码所依赖的所有扩展是否存在是(非常)好的做法

仅仅因为它是构建的,即您的头定义了所需的扩展,并不意味着二进制文件最终不会出现在具有不同支持扩展集的系统上

选择一个众所周知的测试函数来测试扩展是个好主意,或者花时间去理解如果测试没有正确编码可能会出现的微妙问题。这主要与子字符串有关,并且不会生成错误的前缀命中。

定义可以使用的函数
isExtensionSupported()
。在运行时测试代码所依赖的所有扩展是否存在是(非常)好的做法

仅仅因为它是构建的,即您的头定义了所需的扩展,并不意味着二进制文件最终不会出现在具有不同支持扩展集的系统上


选择一个众所周知的测试函数来测试扩展是个好主意,或者花时间去理解如果测试没有正确编码可能会出现的微妙问题。这主要与子字符串有关,并且不会生成错误的前缀命中。

谢谢你的建议,我的程序现在一切正常:)谢谢你的建议,我的程序现在一切正常:)
 glGenTextures(1, &color_tex);
 glBindTexture(GL_TEXTURE_CUBE_MAP, color_tex);
 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 //NULL means reserve texture memory, but texels are undefined
 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+0, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+1, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+2, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+3, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+4, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
 glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+5, 0, GL_RGBA8, 256, 256, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL);
 //-------------------------
 glGenFramebuffersEXT(1, &fb);
 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb);
 //Attach one of the faces of the Cubemap texture to this FBO
 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_CUBE_MAP_POSITIVE_X, color_tex, 0);
 //-------------------------
 glGenRenderbuffersEXT(1, &depth_rb);
 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_rb);
 glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, 256, 256);
 //-------------------------
 //Attach depth buffer to FBO
 glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depth_rb);