Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
opengl中的纹理渲染_Opengl - Fatal编程技术网

opengl中的纹理渲染

opengl中的纹理渲染,opengl,Opengl,我得到错误:GL\u帧缓冲区\u不完整\u缺少\u附件,代码如下。关于我在这里可能缺少什么的任何想法: glGenTextures(1, &tex); glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParame

我得到错误:GL\u帧缓冲区\u不完整\u缺少\u附件,代码如下。关于我在这里可能缺少什么的任何想法:

glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA4, 640, 480, 0, GL_RGBA4, GL_UNSIGNED_BYTE, NULL);

glGenFramebuffers(1, &renderTexture);
glBindFramebuffer(GL_FRAMEBUFFER, renderTexture);
//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, tex, 0);
glDrawBuffer(GL_COLOR_ATTACHMENT0);


GLint val = glCheckFramebufferStatus(GL_FRAMEBUFFER);

if(val != GL_FRAMEBUFFER_COMPLETE)
{
    std::cout <<"\n Error in framebuffer  : 2";
}
glGenTextures(1,&tex);
glBindTexture(GL_TEXTURE_2D,tex);
glTexParameteri(GL_纹理2D、GL_纹理包裹S、GL_重复);
glTexParameteri(GL_纹理2D、GL_纹理包裹、GL_重复);
glTexParameteri(GL_纹理2D、GL_纹理最小过滤器、GL_线性);
glTexParameteri(GL_纹理2D、GL_纹理MAG_过滤器、GL_线性);
GLTEXAGE2D(GL_纹理_2D,0,GL_RGBA4,640,480,0,GL_RGBA4,GL_无符号_字节,NULL);
glGenFramebuffers(1,&renderTexture);
glBindFramebuffer(GL_FRAMEBUFFER,renderTexture);
//glFramebufferTexture2D(GL_帧缓冲区、GL_颜色_附件0、GL_纹理_2D、tex、0);
glFramebufferTexture(GL_帧缓冲区,GL_颜色_附件0,tex,0);
glDrawBuffer(GL_颜色_附件0);
GLint val=glCheckFramebufferStatus(GL_FRAMEBUFFER);
如果(val!=GL\u帧缓冲区\u完成)
{

std::cout在对FBO进行调用之前,您需要绑定FBO。修改对象的OpenGL调用通常会对当前绑定的对象进行操作。这与您在发布代码开始时对纹理所遵循的方案相同,即使用
glGenTextures()
生成纹理id,使用
glBindTexture()绑定纹理id
,然后进行修改纹理的调用,如
glTexParameteri()
glTexImage2D()

在FBO的情况下,
glFrameBufferTexture2D()
glDrawBuffer()
操作当前绑定的FBO。因此,
glBindFramebuffer()
调用需要在这些调用之前进行:

glGenFramebuffers(...);
glBindFramebuffer(...);
glFramebufferTexture2D(...);
glDrawBuffer(...);
如果看到代码中出现任何意外行为,调用
glGetError()
总是一个好主意。您可能会在
glFramebufferTexture2D()
调用中看到
GL\u INVALID\u操作
错误,因为没有绑定FBO

关于代码的更多观察:

  • 在这种情况下,
    glDrawBuffer()
    调用是多余的。
    GL\u COLOR\u ATTACHMENT0
    是FBO的默认绘制缓冲区
  • 虽然可以在此处使用
    glFramebufferTexture()
    glFramebufferTexture2D()
    也可以使用。
    glFramebufferTexture()
    需要更新的OpenGL版本(3.2),并且只对分层附件(纹理数组等)有利

在对FBO进行调用之前,您需要绑定FBO。修改对象的OpenGL调用通常对当前绑定的对象进行操作。这与您在发布代码开始时对纹理遵循的方案相同,即使用
glGenTextures()
生成纹理id,使用
glBindTexture()绑定它
,然后进行修改纹理的调用,如
glTexParameteri()
glTexImage2D()

在FBO的情况下,
glFrameBufferTexture2D()
glDrawBuffer()
操作当前绑定的FBO。因此,
glBindFramebuffer()
调用需要在这些调用之前进行:

glGenFramebuffers(...);
glBindFramebuffer(...);
glFramebufferTexture2D(...);
glDrawBuffer(...);
如果看到代码中出现任何意外行为,调用
glGetError()
总是一个好主意。您可能会在
glFramebufferTexture2D()
调用中看到
GL\u INVALID\u操作
错误,因为没有绑定FBO

关于代码的更多观察:

  • 在这种情况下,
    glDrawBuffer()
    调用是多余的。
    GL\u COLOR\u ATTACHMENT0
    是FBO的默认绘制缓冲区
  • 虽然可以在此处使用
    glFramebufferTexture()
    glFramebufferTexture2D()
    也可以使用。
    glFramebufferTexture()
    需要更新的OpenGL版本(3.2),并且只对分层附件(纹理数组等)有利

调用顺序错误。您需要在
glFramebufferTexture2D()
之前调用
glBindFramebuffer()
。太好了!!谢谢..这样做了!!调用顺序错误。您需要在
glFramebufferTexture2D()之前调用
glBindFramebuffer()
。太好了!!谢谢..效果很好!!我已经更新了渲染到纹理的代码,然后将Blit渲染到默认FB,但是没有渲染任何内容。它都是黑色的。有什么想法吗?我已经更新了渲染到纹理的代码,然后将Blit渲染到默认FB,但是没有渲染任何内容。都是黑色的。有什么想法吗?