不带图形API的便携式实时渲染器窗口

时间:2018-11-08 06:12:41

标签: c++ linux graphics window renderer

我正在使用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,但不想使用硬件加速的API,例如OpenGL。因为每秒60次刷新内存中包含场景渲染的缓冲区(8位无符号int数组,具有简单的RGB表示,每个像素3个值),所以我只想将此缓冲区显示在窗口内每秒60次。

2 个答案:

答案 0 :(得分:1)

Window-API之类的独立库,它们将提供跨平台的窗口管理(在这种情况下为Linux + Windows)。

QtwxWidgets之类的框架可以做到这一点以及更多,例如为您提供厨房水槽,冰箱,后院火箭发射台等。

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

答案 1 :(得分:0)

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

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

此外,还有诸如SDL之类的跨平台库。

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

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