[尝试绑定帧缓冲区或附加渲染缓冲区时无效的操作

问题描述 投票:0回答:1

我正在尝试创建帧缓冲区,以便可以渲染场景,然后对其应用过滤器,但是当我尝试绑定到任何新创建的帧缓冲区或将渲染缓冲区附加到其中一个时,我得到一个错误。

我像这样创建了帧缓冲区和渲染缓冲区:

GLuint frameBuffer[2];
glGenFramebuffers(2, frameBuffer);

//generate colorbuffer for normal rendering and brightness
GLuint colorBuffer[2];
glGenTextures(2, colorBuffer);


for (unsigned int i = 1; i > -1; i--)
{
    glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer[i]);
    glBindTexture(GL_TEXTURE_2D, colorBuffer[i]);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, 800, 800, 0, GL_RGB, GL_FLOAT, NULL); //800x800 window
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);  
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    // attach texture to framebuffer
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorBuffer[i], 0);
}

//currently frameBuffer[0] should be bound rn
GLuint rbo;
glGenRenderbuffers(1, &rbo); 
glBindRenderbuffer(GL_RENDERBUFFER, rbo); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 800, 800); //800x800 window 

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); //attach the renderbuffer

if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
    cout << "No Framebuffer" << endl;
}

当我检查帧缓冲区是否完整时,它不会引发错误,因此我认为它是完整的,但是>

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); 

引发无效的操作错误。

[稍后尝试在程序中使用glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer[0]);也会导致无效的操作错误,无论我是否尝试将渲染缓冲区绑定到它。

我是opengl的新手,我不确定自己在做什么错。我认为这与帧缓冲区的生成有关。如果您需要更多信息,请随时询问。

我正在尝试创建帧缓冲区,以便可以渲染场景,然后对其应用过滤器,但是当我尝试绑定到任何新创建的帧缓冲区或附加...时,出现错误。

您的for循环永远不会执行,结果是frameBuffer[0]永远不会受到约束,这与您的预期相反。

i是无符号的,因此条件被评估为1 > 4294967295,始终为false。如果您想使用无符号变量向后迭代某个范围(有时是必需的),则可以通过以下方法实现:

for (unsigned int i = 2; i --> 0;)

但是我看不到在代码中向后迭代的特殊原因,因此您可以简单地将循环重写为:

for (unsigned int i = 0; i < 2; ++i)
c opengl opengl-es framebuffer
1个回答
1
投票

您的for循环永远不会执行,结果是frameBuffer[0]永远不会受到约束,这与您的预期相反。

© www.soinside.com 2019 - 2024. All rights reserved.