2013-10-02 80 views
1

我剛開始嘗試OpenGL,並遇到一個奇怪的問題。截圖而不是OpenGL輸出

如果我使用g++ test.c -lGL -lGLU -lglut然後./a.out進行編譯和執行,將打開一個分隔窗口(代碼中指定的大小)。但是它並沒有輸出代碼,它有一個屏幕截圖(它與屏幕重疊的部分)。

這絕對不是與代碼有關的,因爲它在我的朋友的計算機上運行良好。但我需要在我的電腦上修復它。

我在Linux Mint 15 64bit(HP DV6 6121tx)上。

所以我無法繼續前進。這裏是我的代碼:

#include <GL/gl.h> 
#include <GL/glut.h> 
#define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); glVertex2f ((x1),(y1)); glVertex2f ((x2),(y2)); glEnd(); 


void init() 
{ 
    glClearColor(1.0,1.0,1.0,0.0); 
    glMatrixMode(GL_PROJECTION); 
    gluOrtho2D (-600,600,-400,400); 
    glClear(GL_COLOR_BUFFER_BIT); 
} 


int main(int argc, char** argv) 
{ 

    glutInit(&argc,argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowPosition(0,0); 
    glutInitWindowSize(1200,800); 
    glutCreateWindow("ABCD"); 

    init(); 

    glutMainLoop(); 

    return 0; 
} 
+0

您沒有繪製任何東西,因爲您忘記設置glutDisplayFunc,並且繪製函數在渲染之前不清除backbuffer。 – SigTerm

+0

您可能正在使用合成窗口管理器(例如Xfce),根據您描述的情況來判斷。在這種情況下,你不能做單緩衝繪圖。用'GLUT_DOUBLE'替換'GLUT_SINGLE'並在'init(...)'結尾調用'glutSwapBuffers(...)'。這應該可以解決您的問題。 –

回答

2
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
        ^^^^^^^^^^^ 

你已經問了單緩衝窗口,所以你必須要glFlush()/glFinish()在排隊的強制輸出到屏幕上。

init()的末尾添加glFinish()