c++ - 实时 2D 渲染到系统内存

标签 c++ c 2d rendering real-time

通过编写处理系统(非视频)内存中的图像/帧数据的视频过滤器,呈现 2D 图形,应该是跨平台的(至少 Windows、Linux 和 OSX) 并且工作非常快,我查看了不同的渲染器,比如 Cairo , AGG和许多其他项目。我不希望有 GPU 要求,所以到目前为止我的重点是软件渲染。

遗憾的是,Cairo 在复杂的路径和梯度上可能会变得非常慢,并且会通过微小的路径段产生难看的几何错误,AGG 也很慢,因为缺少优化,这需要很多用户的工作,其他项目只是呈现到窗口或性能对他们来说并不重要。 Blend2D让我感到好奇,但他需要时间才能变得成熟。

现在我问我:我是否应该只渲染到 OpenGL 帧缓冲区并通过几何库处理 2D 到 3D 的东西,接受挑战从头开始开发软件渲染器(通过 SIMD 加速,线程管道,等)还是我错过了适合我的图书馆?

即使是 1080p 或更大的图像,插入与 GPU 相关的所有图形总是值得的,因为如今与视频内存之间的廉价数据传输也是如此吗?

最佳答案

OpenCV 的替代品可能是 SDL .至少有一个教程和文档专门讨论 streaming video data to the hardware .当然,您必须在 glsl 中重写您的过滤器才能获得任何体面的加速。

也就是说,听起来您的问题可能更多地受益于 GPU 计算解决方案,例如 OpenCL 或 Cuda。在这种情况下,不涉及渲染,而是将数据发送到 GPU 内核,并在处理后取回。或者可以将其发送到 OpenGL/DirectX(视频内存可以很容易地作为纹理重复使用而不会损失性能)进行渲染。如果您不热衷于超越 OpenGL api,您也可以使用 compute-shader。像传统着色器一样工作,除了它在一个 channel 中计算,但有一些额外的约束和限制。

关于c++ - 实时 2D 渲染到系统内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31982437/

相关文章:

c++ - 默认模板参数编译器错误

c# - 确定 winforms 应用程序中像素的颜色

C++多线程中断

C++从istream读取int,检测溢出

python - 嵌入式 Python : Py_Initialize: can't initialize sys standard streams

C - 将子字符串转换为 int

谁能告诉我为什么这个无限的 while 循环不能正常工作?

c++ - 从程序执行批处理文件

c - 将二维指针数组传递给函数 C

arrays - Int 的 Swift 3 二维数组