【问题标题】:Portable real time renderer window without graphical API [closed]没有图形 API 的便携式实时渲染器窗口 [关闭]
【发布时间】:2018-11-08 06:12:41
【问题描述】:

我正在使用 C++ 在 CPU 和 GPU(使用 Cuda)上编写渲染器。我不使用 DirectX、Vulkan 或 OpenGL,我自己编写整个渲染管道作为练习。目前,渲染结果保存为 PNG 文件。

但是,我想在一个窗口中实时显示渲染结果,但我不知道该怎么做。 例如,在 Nvidia OptiX 示例 (https://github.com/nvpro-samples/optix_advanced_samples) 中,他们使用 glfw3 创建一个窗口,然后创建一个 OpenGL 上下文,并在 OpenGL 上下文中的简单纹理上显示 OptiX 渲染的结果。我也想做同样的事情,但我不想创建 OpenGL 上下文,因为我想要一个不使用任何图形 API 的可移植解决方案(Windows 和 Linux)。我不想依赖 OpenGL,尤其是如果它只是为了显示。

是否有一个可移植的 C++ 库来管理窗口并实时显示纹理而不使用任何主要的图形 API(DirectX、Vulkan、OpenGL)?

编辑:感谢您的回答。我最初的问题可能不太清楚。我想使用 GUI,但不想使用 OpenGL 等硬件加速 API。因为我每秒刷新 60 次内存中的缓冲区,其中包含我的场景渲染(一个 8 位无符号整数数组,具有简单的 RGB 表示,每个像素 3 个值),我只想在窗口中显示这个缓冲区每秒 60 次。

【问题讨论】:

  • 把你的渲染图像想象成一个位图。你将如何显示位图?在某些时候,您需要调用特定于操作系统的函数来执行此操作。
  • 我怀疑您是否能够仅使用 WinAPI/Xlib 实时显示渲染的 png(这取决于您将实时定义为 ^^ 的内容)。
  • 在这里请求图书馆被认为是题外话。也就是说,我推荐 SDL2。

标签: c++ linux graphics window renderer


【解决方案1】:

有像 Window-API 这样的独立库将提供跨平台窗口管理(在这种情况下是 Linux + Windows)。

有像 QtwxWidgets 这样的框架可以做到这一点等等,比如为您提供厨房水槽、冰箱、后院火箭发射台等。

您仍然需要使用“图形”API 或某种框架(因此是 GUI、图形用户界面),但您当然可以在 硬件之外显示图像、动画、视频等- 加速 3D 图形渲染上下文,如 OpenGL、Vulkan 或 DirectX。

【讨论】:

  • 感谢您的回答。我的问题可能不太清楚。我想使用 GUI,但不想使用 OpenGL 等硬件加速 API。因为我每秒刷新 60 次内存中包含我的场景渲染的缓冲区,我只想在窗口中显示这个缓冲区。
  • 前两段解决了这个问题。第三段说是的,可以在 OpenGL/DirectX/Vulkan 之外进行这种基本的显示。实际上,有一百种方法可以满足您的要求,而不仅仅是一两种——选择您选择的库并开始吧! GTK、GDI、MFC、SDL,它们都可以进行基本的窗口化,并且无论操作系统如何,该窗口都是您绘制渲染输出的“东西”。
【解决方案2】:

对于 Windows,只需使用 User32 和 GDI。 (或其他 DLL,如 gdiplus。)

对于 Linux 发行版,您可以使用 GTK 或 KDE。

此外,还有 SDL 等跨平台库。

这些库支持高级(?)级窗口 API。因此,您可以获得小部件(或窗口)的画布(或表面),并且可以简单地复制渲染结果。只需复制位图即可。

或者,您可以直接使用 EGL 等低级图形基础库来获取显示表面。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多