【问题标题】:Fast pixel drawing library快速像素绘图库
【发布时间】:2010-11-26 19:58:40
【问题描述】:

我的应用程序以每像素的方式生成“动画”,因此我需要有效地绘制它们。我尝试了不同的策略/库,但结果并不令人满意,尤其是在更高的分辨率下。

这是我尝试过的:

  • SDL: 好的,但是很慢;

  • OpenGL:像素操作效率低;

  • xlib:更好,但还是太慢了;

  • svgalibdirectfb,(其他帧缓冲区实现):它们看起来完美,但对于最终用户来说设置起来太棘手了。

(注意:我可能对这些断言有误,如果是,请纠正我)

我需要的是:

  • 快速像素绘制,性能媲美OpenGL 渲染;

  • 它应该可以在 Linux 上运行(作为额外功能的跨平台);

  • 应该支持双缓冲和垂直同步;

  • 对于硬件而言,它应该是可移植的;

  • 应该是开源的。

你能给我一些启示/想法/建议吗?

【问题讨论】:

  • 您有没有找到好的解决方案?我有同样的问题。我想手动绘制 1920x1080p 帧的每个像素,想不出一个快速的方法。
  • 是的,最好的方法似乎是the accepted answer 建议的 OpenGL 纹理。
  • 我怀疑 SDL 本身不是瓶颈,而是 X11。我假设您正在运行 X,因此由于 SDL 是一个抽象层,因此它将 SDL 像素操作转换为使用 X11 后端,这是延迟的来源。尝试在没有 X 的机器上执行 SDL,您会发现它的运行速度要快得多,因为它现在将直接打印到 Linux 帧缓冲区。

标签: linux drawing pixel performance


【解决方案1】:

您的像素是稀疏的还是密集的(例如位图)?如果您要使用像素创建密集位图,那么另一种选择是将位图转换为 OpenGL 纹理并使用 OpenGL API 以某种帧速率进行渲染。

基本问题是图形硬件在不同的硬件平台上会有很大的不同。要么你选择一个抽象层,这会减慢速度,要么代码更接近现有的图形硬件类型,这是不可移植的。

【讨论】:

  • 密集。我将尝试使用 OpenGL 纹理。但是有些东西对我来说仍然很模糊,重新绘制整个屏幕并不奇怪,例如拖动这个浏览器窗口。当我尝试在自己的应用程序中执行此类重绘时,为什么事情会变得复杂? (对不起这个愚蠢的问题)
  • 我最终接受了不可移植的解决方案,但最终用户必须易于设置。
  • +1:使用OpenGL 纹理和PBO 似乎是最佳选择。谢谢。
【解决方案2】:

我不完全确定您做错了什么,但可能是您一次将一个像素写入显示表面。

不要那样做。

相反,以与显示表面相同的格式在主内存中创建一个渲染表面进行渲染,然后通过一次操作将整个渲染图像复制到显示器。现代 GPU 的每个事务非常慢,但可以在一次操作中非常快速地移动大量数据。

【讨论】:

  • 我不这样做,你说的是双缓冲,对吧?尝试使用SDLxlib,它改善了整个事情,但还不够。
【解决方案3】:

看起来您将窗口管理器(SDL 和 xlib)与渲染库(opengl)混淆了。

只需选择一个窗口管理器(SDL、glut 或 xlib,如果您喜欢挑战),激活双缓冲模式,并确保您获得直接渲染。

你有什么样的图形卡?它很可能会在 GPU 上处理像素。查看如何在 opengl 中创建像素着色器。像素着色器按像素处理。

【讨论】:

  • SDLxlib 远不是窗口管理器。当然这不是他们的主要特点。
  • @cYrus 嗯,有一个链接可以支持该声明吗?我知道(例如)SDL 可以做音频,xlib 可以在远程服务器上显示窗口,但它们的主要功能是管理窗口。
  • 来自 www.libsdl.com:« Simple DirectMedia Layer 是一个跨平台多媒体库,旨在通过 OpenGL 和 2D 视频帧缓冲区提供对音频、键盘、鼠标、操纵杆、3D 硬件的低级访问. MPEG 播放软件、仿真器和许多流行游戏都使用它,包括屡获殊荣的 Linux 端口“文明:号召力量”。 »
  • xlib 充当 X 服务器的接口。来自 en.wikipedia.org/wiki/X_server: « X 提供了构建此类 GUI 环境的基本框架或原语:在屏幕上绘制和移动窗口以及与鼠标和键盘交互。 X 不强制要求用户界面——称为窗口管理器的单个客户端程序处理这个。因此,基于 X 的环境的视觉样式变化很大。不同的程序可能会呈现截然不同的界面。 X 被构建为操作系统内核之上的附加(应用程序)抽象层。 »
  • Xlib 不是一个窗口管理器。这是X Window System 的 C API。 X Window System 不是一个窗口管理器。它是一个“图形服务器”(不管是什么)。
猜你喜欢
  • 1970-01-01
  • 2010-10-16
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多