没有图形的便携式实时渲染器 window API
Portable real time renderer window without graphical API
我正在使用 C++ 在 CPU 和 GPU(使用 Cuda)上编写渲染器。我不使用 DirectX、Vulkan 或 OpenGL,我自己编写整个渲染管道作为练习。目前,渲染结果保存为 PNG 文件。
但是,我想在window中实时显示渲染结果,但我不知道该怎么做。
例如,在 Nvidia OptiX 示例 (https://github.com/nvpro-samples/optix_advanced_samples) 中,他们使用 glfw3 创建一个 window,然后他们创建一个 OpenGL 上下文,并在 OpenGL 上下文中的一个简单纹理上显示 OptiX 渲染的结果.我也想这样做,但我不想创建 OpenGL 上下文,因为我想要一个不使用任何图形 API 的便携式解决方案(Windows 和 Linux) .我不想依赖 OpenGL,尤其是如果它仅用于显示。
是否有可移植的 C++ 库来管理 window 和实时显示纹理而不使用任何主要图形 API(DirectX、Vulkan、OpenGL)?
编辑:感谢您的回答。我最初的问题可能不太清楚。我想使用 GUI,但我不想使用硬件加速 API,例如 OpenGL。因为我每秒刷新 60 次内存中的缓冲区,其中包含我的场景渲染(一个 8 位无符号整数数组,具有简单的 RGB 表示,每个像素 3 个值),我只想在 window每秒60次
像 Window-API 这样的独立库将提供跨平台 window 管理(Linux + Windows,在这种情况下)。
像 Qt and wxWidgets 这样的框架可以做到这一点,还有更多,比如为您提供厨房水槽、冰箱、后院火箭发射台等。
您仍然需要与 "graphical" API 或某种框架(因此 GUI,图形用户界面)对话,但您当然可以显示图像、动画、视频、等等,硬件加速 3D 图形渲染上下文,如 OpenGL、Vulkan 或 DirectX。
对于Windows,只需使用User32 和GDI。 (或其他 DLL,如 gdiplus。)
对于 Linux 发行版,您可以使用 GTK 或 KDE。
此外,还有像SDL这样的跨平台库。
这些库支持高级 (?) 级别 windowing api。因此,您可以获得小部件(或window)的canvas(或表面),并且您可以简单地复制您的渲染结果。只需复制位图。
或者,您可以直接使用 EGL 等低级图形基础库来获取显示表面。
我正在使用 C++ 在 CPU 和 GPU(使用 Cuda)上编写渲染器。我不使用 DirectX、Vulkan 或 OpenGL,我自己编写整个渲染管道作为练习。目前,渲染结果保存为 PNG 文件。
但是,我想在window中实时显示渲染结果,但我不知道该怎么做。 例如,在 Nvidia OptiX 示例 (https://github.com/nvpro-samples/optix_advanced_samples) 中,他们使用 glfw3 创建一个 window,然后他们创建一个 OpenGL 上下文,并在 OpenGL 上下文中的一个简单纹理上显示 OptiX 渲染的结果.我也想这样做,但我不想创建 OpenGL 上下文,因为我想要一个不使用任何图形 API 的便携式解决方案(Windows 和 Linux) .我不想依赖 OpenGL,尤其是如果它仅用于显示。
是否有可移植的 C++ 库来管理 window 和实时显示纹理而不使用任何主要图形 API(DirectX、Vulkan、OpenGL)?
编辑:感谢您的回答。我最初的问题可能不太清楚。我想使用 GUI,但我不想使用硬件加速 API,例如 OpenGL。因为我每秒刷新 60 次内存中的缓冲区,其中包含我的场景渲染(一个 8 位无符号整数数组,具有简单的 RGB 表示,每个像素 3 个值),我只想在 window每秒60次
像 Window-API 这样的独立库将提供跨平台 window 管理(Linux + Windows,在这种情况下)。
像 Qt and wxWidgets 这样的框架可以做到这一点,还有更多,比如为您提供厨房水槽、冰箱、后院火箭发射台等。
您仍然需要与 "graphical" API 或某种框架(因此 GUI,图形用户界面)对话,但您当然可以显示图像、动画、视频、等等,硬件加速 3D 图形渲染上下文,如 OpenGL、Vulkan 或 DirectX。
对于Windows,只需使用User32 和GDI。 (或其他 DLL,如 gdiplus。)
对于 Linux 发行版,您可以使用 GTK 或 KDE。
此外,还有像SDL这样的跨平台库。
这些库支持高级 (?) 级别 windowing api。因此,您可以获得小部件(或window)的canvas(或表面),并且您可以简单地复制您的渲染结果。只需复制位图。
或者,您可以直接使用 EGL 等低级图形基础库来获取显示表面。