gpt4 book ai didi

c++ - 比 xlib 更快

转载 作者:太空宇宙 更新时间:2023-11-04 04:16:05 24 4
gpt4 key购买 nike

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

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

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

是否有比 X 更快的库?

TIA

<小时/>

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

我无法获得与 Xlib 一起运行的等效示例。它不断终止,并出现类似以下错误:“XIO:在 86 个请求(86 个已知已处理)后,X 服务器“:0”上出现致命 IO 错误 11(资源暂时不可用),还剩下 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 帧缓冲区或使用 DirectFB ( http://www.directfb.org ) 来避免它们。

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

最后,我认为 SDL 是您的最佳选择。网址:http://www.libsdl.org .

关于c++ - 比 xlib 更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16338477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com