C++ 比xlib快

C++ 比xlib快,c++,linux,user-interface,C++,Linux,User Interface,我搜索了轻量级GUI,找到了几个(例如FLTK),但我真正想要的是Linux/Ubuntu上的快速库。它不需要跨平台。它必须要快 我的申请很简单。我有一张画布,上面写着800x800,我是: -在网格中绘制200x200个正方形 -几串文字 -一些人可以按下鼠标的热点 我正在尽可能快地提高帧速率。我已经找到了X11 C++代码。 有比X更快的库吗 短暂性脑缺血发作 更新:下面是glut中的示例代码。看起来我可以在笔记本电脑上以20毫秒的速度获得一个画面(索尼Vaio i7-3632QM 2.2

我搜索了轻量级GUI,找到了几个(例如FLTK),但我真正想要的是Linux/Ubuntu上的快速库。它不需要跨平台。它必须要快

我的申请很简单。我有一张画布,上面写着800x800,我是: -在网格中绘制200x200个正方形 -几串文字 -一些人可以按下鼠标的热点

我正在尽可能快地提高帧速率。我已经找到了X11 C++代码。 有比X更快的库吗

短暂性脑缺血发作


更新:下面是glut中的示例代码。看起来我可以在笔记本电脑上以20毫秒的速度获得一个画面(索尼Vaio i7-3632QM 2.2Ghz,运行Ubuntu 12.04)。顺便说一句,它运行时看起来像电视“雪”

我无法获得使用Xlib运行的等效样本。它不断终止,出现类似以下错误: X服务器上的“XIO:致命IO错误11(资源暂时不可用):在86个请求(86个已知已处理)后0”,剩余10个事件

#包括
#包括
#包括
#包括
int win_w=0.0;
int win_h=0.0;
#包括
#包括
空心绘图网格(整数大小)
{
const int cellsize=3;
const int gridsize=大小*单元格大小;
对于(int y=0;y
但是,帧缓冲区不会在X窗口中运行。因此,您确实需要最简单的Xlib或XCB代码来为您的应用程序创建窗口,并使用GLX渲染到该窗口的表面


最后,我相信SDL是你最好的选择。URL:。

可能是OpenGL。你确定是工具包让你慢下来了,而不是你的代码,或者是你的编码方式吗?x不是gui库Mat:不,我不确定,这是一个很好的问题。但是你可以看到我的选择:我可以花很长时间来找出它的错误我有xlib代码,然后发现有更简单、更快的东西,等等。或者我现在可以问,花任何时间来学习新的工具/lib等等。Glut是跨平台的。假设跨平台代码会产生一些开销,我的问题是:对于Ubuntu/Linux,有没有类似Glut的东西?
#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;
  }