java - Intel 和 Nvidia 之间的 OpenGL fbo blitting 不一致

标签 java opengl lwjgl opengl-3 fbo

我正在将 OpenGL 中的场景以低分辨率渲染到帧缓冲区中。然后我打算将这个版本绘制到整个屏幕上(使用 GL_NEAREST 放大)。我使用纹理 block 传输 (glBlitFramebuffer) 来执行此操作。在我的 Nvidia GPU 上这有效,但是当在我的 Intel i7 集成显卡上执行完全相同的代码时,目标帧缓冲区上的 y 位置似乎是错误的(即图像渲染得太远)。

glGetError 不返回错误。由于 Nvidia 驱动程序往往非常宽容,我希望我在 OpenGL 规范中遗漏了一个 Nvidia 不关心的小细节。我搜索了 Internet 和 stackoverflow,但找不到描述的类似问题。两个驱动程序都报告支持 OpenGL 3.0

我的绘图代码:

//setup viewport for small image
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(0, 0, image.getWidth(), image.getHeight());

//bind small framebuffer
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo);
glDrawBuffers(GL_COLOR_ATTACHMENT0);
glClear(GL_COLOR_BUFFER_BIT);

//draw
renderRotatedFull(1);//nothing interesting at all happening here

//reset Viewport
glPopAttrib();

//prepare and execute blitting
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
glReadBuffer(GL_COLOR_ATTACHMENT0);

glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glDrawBuffers(GL_BACK_LEFT);

glBlitFramebuffer(0, 0, image.getWidth(), image.getHeight(), 0, 0, Game.width,
    Game.height, GL_COLOR_BUFFER_BIT, GL_NEAREST);

glBindFramebuffer(GL_FRAMEBUFFER, 0);

//throws exception if there is an OpenGL error
org.lwjgl.opengl.Util.checkGLError();

初始化过程如下:

fbo =glGenFramebuffers();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);

rbo = glGenRenderbuffers();
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, image.getWidth(), image.getHeight());
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo);

assert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE);

最佳答案

这可能是 Intel HD Graphics 的一个已知问题。在此处查看此程序 - http://www.realtech-vr.com/glview/download.php

这个程序会告诉你你的显卡支持什么版本的 OpenGL,有时 Intel HD 只支持 1.1(我知道这很奇怪!)但有时它可以说它支持更高版本但有错误。

祝你好运!

关于java - Intel 和 Nvidia 之间的 OpenGL fbo blitting 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14469569/

相关文章:

opengl - 启用 OpenGL 扩展

java - lwjgl 导入输入类不起作用

java - 在java中生成MD5字符串

c++ - 加载 "big"纹理文件时出现段错误

java - 使用 spring-hibernate 的 2 个不同的数据库连接

c++ - 什么是真正的桌面背景HWND?

c++ - 使用 OpenGL 用鼠标旋转立方体

java - IntelliJ Maven 项目有 UnsatisfiedLinkError : failed to locate library: lwjgl. dll

java - 什么时候不同步读/写变量是安全的?

java - 将txt文件中的数据存储到具有两个键java的映射中