0

軽量の GUI を検索していくつか (FLTK など) を見つけましたが、本当に欲しいのは Linux/Ubuntu の高速なライブラリです。クロスプラットフォームである必要はありません。ただ速くなければなりません。

私のアプリケーションは簡単です。私は 800x800 というキャンバスを持っており、その上に次のようなものがあります。

フレームレートをできるだけ速くしようとしています。サンプルの X11 C++ コードは既に見つかりました。

X よりも高速なライブラリはありますか?

ティア


更新: これは glut のサンプル コードです。私のラップトップ(Ubuntu 12.04を実行しているSony Vaio i7-3632QM 2.2Ghz)では、20ミリ秒で1フレームを取得できるようです。余談ですが、走るとテレビの「雪」のように見えます…

Xlib で実行する同等のサンプルを取得できませんでした。次のようなエラーで終了し続けます:「XIO: X サーバー ":0 で致命的な 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;
  }
4

1 に答える 1

0

2 つの「X ライブラリ」があります。古き良き Xlib と XCB。XCB は最新のアーキテクチャを備えているため、「高速」である必要があります。これら 2 つのパフォーマンスに満足できない場合は、Linux フレームバッファを直接使用するか、DirectFB ( http://www.directfb.org ) を使用して回避できます。

ただし、フレームバッファは X ウィンドウでは実行されません。したがって、アプリケーション用のウィンドウを作成し、GLX を使用してそのウィンドウの表面にレンダリングするには、できるだけ単純な Xlib または XCB コードが必要です。

最後に、あなたにとって最良の選択肢は SDL だと思います。URL: http://www.libsdl.org .

于 2014-01-30T18:04:41.007 に答える