首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建FrameBuffer: GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS时出错

创建FrameBuffer: GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS时出错
EN

Stack Overflow用户
提问于 2013-09-30 14:06:32
回答 2查看 2.5K关注 0票数 1

我用libgdx创建了一些程序。我需要在帧缓冲区中使用一些操作。对于此操作,我将创建新的框架缓冲区,在此操作之后,我将调用framebuffer ()。当我创建框架缓冲区10次时,我有错误的崩溃程序:无法构造帧缓冲区:不完全维度。我在代码libgdx中看到,这是framebuffer的GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS状态。为什么会发生这种事?我该怎么办才能解决这个问题?

代码:

代码语言:javascript
复制
 if(maskBufferer != null){
     maskBufferer.dispose();
 }
 maskBufferer = new FrameBuffer(Pixmap.Format.RGBA8888, width, height, true);
 mask = createMaskImageMask(aspectRatioCrop, maskBufferer);
 ...

private Texture createMaskImageMask(boolean aspectRatioCrop, FrameBuffer maskBufferer) {
    maskBufferer.begin();

    Gdx.gl.glClearColor(COLOR_FOR_MASK, COLOR_FOR_MASK, COLOR_FOR_MASK, ALPHA_FOR_MASK);
    Gdx.graphics.getGL20().glClear(GL20.GL_COLOR_BUFFER_BIT);
    float[] coord = null;

    ...
    PolygonRegion polyReg = new PolygonRegion( new TextureRegion(new Texture(Gdx.files.internal(texturePolygon)) ),
            coord);
    PolygonSprite poly = new PolygonSprite(polyReg);
    PolygonSpriteBatch polyBatch = new PolygonSpriteBatch();
    polyBatch.begin();
    poly.draw(polyBatch);
    polyBatch.end();

    maskBufferer.end();
    return maskBufferer.getColorBufferTexture();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-30 14:34:09

编辑

总之,当创建了太多的GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS对象(而不调用.dispose())时,FrameBuffer可能会出现在libgdx中,这可能与OpenGL耗尽FBO或纹理/呈现缓冲区句柄有关。

如果在glGenFrameBuffers中没有返回句柄,那么在附加目标或检查状态时,FBO将不会被绑定。同样,试图附加(从对glGenTextures的调用失败)无效的目标将导致FBO将是不完整的。尽管在这两种情况下报告GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS似乎都不正确。

一种可能是调用为目标分配内存,例如glTexImage2DglRenderbufferStorage失败(内存不足)。这使得目标的尺寸不等于其他已经成功地附加到FBO的目标,然后可能产生错误。

创建一个框架缓冲区一次,附加您的呈现目标并重用每个框架是非常标准的。你所说的处置是指glDeleteFrameBuffers

看起来应该有delete maskBufferer;maskBufferer.dispose();。编辑如果它是C++

考虑到这个错误发生在许多帧之后,可能会有很多事情发生。重复检查,您没有创建框架缓冲区或每个帧的附件,而不是删除它们并耗尽对象/句柄。

它看起来也像GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS is 不再使用 (参见规格),类似于现在具有混合维度的能力。这似乎是值得检查,但你的附件都是相同的大小。

缩小导致问题的附件范围的一个快速方法是注释掉其中的一半,并查看错误发生的时间(或在每个附加之后检查状态)。

票数 2
EN

Stack Overflow用户

发布于 2013-10-01 08:11:11

我解决了问题。处置工作得到了帮助。我每次都会重新创建类,因为dispose从来没有被调用过。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19096304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档