如何顯示內存中的幀緩衝區


0

我正計劃編寫一個小型軟件渲染引擎(在有人問之前,這對我來說是一種學習/科學實驗)。

在編寫任何代碼之前,我已經停留在第一步:如何在屏幕上顯示我的幀緩衝區?我計劃要做的是渲染到內存緩衝區中,例如320x200 24位RGB格式。然後,我當然需要在屏幕上顯示結果;全屏或在窗口中。

我知道這裡已經存在類似的問題:

區別在於,我想以50FPS之類的不錯的幀頻頻繁更新圖像。

似乎一種可能性是OpenGL幀緩衝對象和/或緩衝流。我不確定我應該採用這種方式,還是此用例過於誇張?我還考慮過顯示一個帶有紋理的簡單矩形,我會更新每個幀,但是我不確定性能(我想每幀傳輸幾兆字節的數據應該不是問題)。幾年前,我曾嘗試過GDI +和WPF,但性能遠不及我想要達到的水平。不幸的是我再也沒有源代碼了,但是我承認我的方法在那時可能是完全錯誤的。

我不希望使用源代碼或現成的解決方案,而是希望獲得一些指導:使用什麼功能,我很樂意閱讀有關該主題的文章或教程。

我最初考慮的是OpenGL,但是我對DirectX也很好。歡迎其他建議。我打算使用C / C ++或C#,也許使用Python來實現。

我肯定必須有一個簡單的解決方案,但是我承認在圖形編程方面我是一個完全的菜鳥。我猜這只是在尋找一種有效的方法將數據從RAM複製到GPU內存。我想知道復古模擬器(例如Vice)或幻想遊戲機(例如Pico-8)如何解決此問題?

0

Have you considered using SDL 2?

My use-case is basically identical to yours, and I've found this approach to work really well. They have a really nice C (and C++) API for drawing framebuffers to a window. It's also platform-agnostic, so you can share your implementation fairly easily between macOS, Linux and Windows. If you want to see an example, you can go check out this module here on GitHub. I do warn you though, while this implementation works, and I can easily run it at 60-120FPS, it likely does use more CPU than a fully optimised implementation. Specifically observe the initDisplay() and drawWindow() functions.