Faster than xlib

Faster than xlib

本文关键字:xlib than Faster      更新时间:2023-10-16

我已经搜索了轻量级gui,并找到了几个(例如FLTK),但我真正想要的是Linux/Ubuntu上的快速库。它不需要跨平台。只要快就行。

我的应用程序很简单。我有一个800x800的画布,我在上面:-在网格中绘制200x200个正方形-一些文本字符串-一些人可以按下鼠标的热点

我正试着尽可能快地提高帧率。我已经找到了示例X11 c++代码。

有比X更快的库吗?

TIA


更新:这里是一个样例代码。看起来我可以在我的笔记本电脑(索尼Vaio i7-3632QM 2.2Ghz运行Ubuntu 12.04)上在20毫秒内获得一帧。说句题外话,它运行起来就像电视里的"雪"…

我无法获得与Xlib一起运行的等效示例。它一直以类似的错误结束:"XIO: X服务器上的致命IO错误11(资源暂时不可用)":0"在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;
  }

有两个"X库"。好的,老Xlib和XCB。XCB应该"更快",因为它有现代架构。如果您对这两种方法的性能不满意,可以通过直接使用Linux framebuffer或使用DirectFB (http://www.directfb.org)来避免它们。

但是,framebuffer不会在X窗口中运行。因此,您确实需要尽可能简单的Xlib或XCB代码来为您的应用程序创建一个窗口,并使用GLX在该窗口的表面上进行渲染。

最后,我认为最适合您的选择是SDL。URL: http://www.libsdl.org .