我有兩臺電腦,一臺配有i5和ATI Radeon HD 5145的東芝筆記本電腦,以及一臺帶有奔騰D和ATI Radeon X1300系列的舊戴爾臺式機。在計算機hungs上繪製帶有OpenGL的FBO
我創建了一個使用LWJGL創建FBO的Java應用程序。附加到FBO的紋理是屏幕的大小(Toshiba的1366x768和Dell的1024x768)。
我使用名爲MSI Afterburner的程序來查看兩臺計算機上的相同應用程序,以查看CPU使用率,GPU使用率和幀率。
在東芝,它的工作完美,在戴爾它hungs。我稍後解釋更好。
下面是用於創建FBO的代碼:
//Create FBO
DisplayMode display = Display.getDisplayMode();
int fboWidth = display.getWidth();
int fboHeight = display.getHeight();
int fboTextureID = glGenTextures();
int fboID = glGenFramebuffersEXT();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboID);
glBindTexture(GL_TEXTURE_2D, fboTextureID);
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_RGBA8, fboWidth, fboHeight, 0, GL_RGBA, GL_INT,
(java.nio.IntBuffer) null);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_TEXTURE_2D, fboTextureID, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glBindTexture(GL_TEXTURE_2D, 0);
這是在顯示FBO while循環:
while(true)
{
renderFBO();
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fboTextureID);
glBegin(GL_QUADS);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
int x=0; int y=0; //FBO position
int w=fboWidth; int h=fboHeight; //FBO size
glTexCoord2f(0, 1);
glVertex2f(x, y);
glTexCoord2f(1, 1);
glVertex2f(x+w, y);
glTexCoord2f(1, 0);
glVertex2f(x+w, y+h);
glTexCoord2f(0, 0);
glVertex2f(x, y+h);
glEnd();
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
Display.update(); //Update the screen
Display.sync(60); //Cap the framerate to 60fps
}
此方法得出一些紋理到FBO離屏
private void renderFBO()
{
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
//Start FBO drawing
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboID);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Here I draw some textures using quads
//Stop FBO drawing
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
正如我之前所說,東芝與Radeon HD的應用程序完美工作。 5%的CPU使用率,20%的GPU使用率和60fps。
在戴爾Radeon X1300電腦上執行此應用程序時, CPU使用率爲50%,GPU無法測量,並且fps爲0.
如果我不繪製FBO,只是將其渲染到屏幕外,那麼舊的戴爾不會掛起,而我得到正常結果5%的CPU使用率,20%的GPU使用率和60fps。
它正在繪製FBO在四分之一什麼導致計算機掛起。我問,爲什麼? 這是爲什麼發生?我的代碼有問題嗎?起初我以爲這是計算機太老了(從2006年開始),並且無法處理FBO的問題,但是爲什麼當FBO離屏時它沒有掛起?