2013-05-02 69 views
0

我搜索了輕量級GUI,發現了幾個(例如FLTK),但我真正想要的是Linux/Ubuntu上的快速庫。它不需要跨平臺。它必須快速。比xlib更快

我的申請很簡單。我有一個畫布說800x800,我是: - 在網格中繪製200x200方格 - 幾個字符串文本 - 一些人可以按下鼠標的熱點。

我試圖儘可能快地推幀率。我已經找到X11 C++示例代碼。

有沒有比X快的庫?

TIA


更新:這裏是在過剩的樣本代碼。它看起來像我可以在我的筆記本電腦上運行20ms內的一幀(運行Ubuntu 12.04的索尼Vaio i7-3632QM 2.2Ghz)。順便說一下,它看起來像電視「雪」時,它運行...

我無法獲得與Xlib運行等效的示例。它始終以類似於以下錯誤的結尾終止: 「XIO:X服務器發生致命IO錯誤11(資源暫時不可用):」86「請求(86個已知處理),剩餘10個事件。」

#include <GL/glut.h> 
#include <cstdlib> 
#include <pthread.h> 
#include <unistd.h> 

int win_w = 0.0; 
int win_h = 0.0; 

#include <pthread.h> 
#include <iostream> 

void drawGrid(int size) 
    { 
    const int cellsize = 3; 
    const int gridsize = size * cellsize; 
    for (int y = 0; y < gridsize; y += cellsize) 
    { 
    for (int x = 0; x < gridsize; x += cellsize) 
     { 
     int c = rand() % 100; 
     if (c < 33) 
     glColor3f(1.0, 0.0, 0.0); 
     else if (c < 66) 
     glColor3f(0.0, 1.0, 0.0); 
     else 
     glColor3f(0.0, 0.0, 1.0); 

     glRecti(x, y, x + cellsize, y + cellsize); 
     } 
    } 
    } 

void display(void) 
    { 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, win_w, 0, win_h, -1, 1); 
    glColor3f(0.0, 0.0, 1.0); 
    glTranslatef(30, 30, 0); 
    drawGrid(200); 
    glFlush(); 
    glutSwapBuffers(); 
    } 

void reshape(int w, int h) 
    { 
    win_w = w; 
    win_h = h; 
    glViewport(0, 0, w, h); 
    } 

static int lasttime = 0L; 
void idle() 
    { 
    const int timePerFrame = 19; //ms 
    int t = glutGet(GLUT_ELAPSED_TIME); 
    int delay = timePerFrame - (t - lasttime); 
    if (delay < 0) 
    { 
    std::cout << t << " " << lasttime << " " << delay << "\n"; 
    } 
    else 
    { 
    ::usleep(delay * 1000); 
    } 
    glutPostRedisplay(); 
    lasttime = glutGet(GLUT_ELAPSED_TIME); 
    } 

int main(int argc, char **argv) 
    { 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); 
    glutInitWindowSize(800, 800); 
    glutCreateWindow("test Glut"); 
    glutDisplayFunc(display); 
    glutReshapeFunc(reshape); 
    glutIdleFunc(idle); 
    glutMainLoop(); 
    return 0; 
    } 
+0

潛在的OpenGL。你確定它是減緩你的工具包,而不是你的代碼,或者你編碼它的方式嗎? – Mat 2013-05-02 12:53:29

+0

x不是gui庫 – 2013-05-02 12:55:30

+0

墊子:不,我不確定,這是一個很好的問題。但是你可以看到我的選擇:我可以花很長時間弄清楚我的xlib代碼出了什麼問題,然後*發現有更簡單,更快捷等等,或者我現在可以問問什麼,花費什麼時間學習新的工具/ lib等。 – JohnA 2013-05-03 02:59:20

回答

0

有兩個「X庫」。好的,舊的Xlib和XCB。 XCB應該是「更快」的,因爲它擁有現代化的建築。如果您對這兩者的性能不滿意,可以直接使用Linux幀緩衝區或使用DirectFB(http://www.directfb.org)來避開它們。

但是,framebuffer將不會在X窗口中運行。因此,您真的需要最簡單的Xlib或XCB代碼來爲您的應用程序創建一個窗口,並使用GLX渲染到該窗口的表面。

最後,對於您來說最好的選擇是我相信的SDL。網址:http://www.libsdl.org

+0

謝謝@DejanLekic,非常感謝!我已經開始研究libsdl ... – JohnA 2014-03-04 02:22:43