【发布时间】:2026-01-19 22:05:01
【问题描述】:
我正在编写一个简单的 3D 渲染引擎。
我的 3D 处理的最终结果是像素数据。接下来我需要使用 GDI+ 在屏幕上显示它。
我正在使用 WinForms 和 Visual Basic。我直接在表单的 ClientRectangle 上绘图。
我有一些问题。
处理完一个像素后,我是否应该先将像素数据写入缓冲区,而不是将每个像素单独发送到 GDI+?
- 如果是这样,我应该一次缓冲多少屏幕?全屏,半屏,四分之一,八分之一?我认为这里可能存在 RAM 使用/性能权衡。
- 像素缓冲区的最佳数据结构是什么?
- 我使用哪个 GDI+ 命令来渲染像素缓冲区(或单个像素)?是否可以避免创建位图作为中间步骤并将像素数据直接发送到屏幕?
我预计的最大屏幕尺寸为 1600x1200。 RAM 可能低至 1GB。
谢谢。
【问题讨论】:
-
您应该先写入内存缓冲区——与渲染缓冲区相比,绘制单个像素的效率非常低。你应该有足够的空间;没有理由不缓冲整个图像。
-
好的,所以我有一个字节数组或一个 32 位整数数组或一个表示像素数据的结构数组,每个像素 4 个字节。将这些数据发送到屏幕的有效方法是什么?
-
正如@ananthonline 所说,您应该从 32 位/像素 RGBA 缓冲区开始。
Bitmap类允许您基于各种数据缓冲区创建位图formats -- 您可能应该尝试PixelFormat32bppARGB或PixelFormat32bppPARGB。 -
我承认,我不知道 Visual Basic,也不知道如何从中访问所有 GDI+ 内容。因此,评论而不是答案......