DFPSR
使用David Forsgren Piuva創建的SSE/NEON的現代軟件渲染C ++ 14。如果您正在尋找最新的主流時尚,請查看其他地方。這是一個用於高質量軟件的圖書館,該圖書館旨在在數十年內開發,並以最少的維護能夠在孫子孫女身上倖存下來。就像將您的遺產刻成石頭一樣,掌握技能的努力需要更多的努力,但由於不依靠遙遠的圖書館而帶來了更強大的結果。最大的用戶體驗和最小系統依賴性。
創作者的背景
DXOMARK世界在移動行業的數字視頻穩定中記錄。與安全臨界機器人願景合作,以實現民用機場交通管制。在移動,醫療和遊戲行業的不同公司優化中舉行演講。在GPU,CPU,DSP,ISP,FPGA和ASIC上進行了優化。
優化需要良好的工具來節省您的時間
優化代碼最重要的部分是掌握高算法和低硬件限制,因為您不能讓科學家設計算法和程序員對其進行優化,而沒有任何更改手寫彙編器的空間(最常見的錯誤)。直到質量和性能之間進行良好的權衡以及所有優化,算法設計才能完成。可以通過以較低的成本提高質量來增加質量,以提高速度和質量,從而節省時間。您可以更快地創建算法的最佳矢量化,您可以迭代設計過程的速度就越快。考慮一下您真正近似的內容。您的目標是繪製盡可能多的完美直角多邊形,還是使用任何技術近似複雜的現實世界形狀的目標?
官方網站:dawoodoz.com
您的遊戲可能使用等值CPU渲染

實時動態光帶有基於深度的鑄造陰影和正常映射,在CPU上運行的800x600像素中的每秒453幀。更高的分辨率將破壞復古風格,並且實際上看起來更糟,但是遊戲邏輯還有很多時間和其他效果。通過預先渲染3D模型來擴散,正常和高度圖像,讀取數據在現代CPU上的緩存效率要高於使用自由透視圖。這也允許在屏幕上的像素比像素更多,並進行靜態幾何形狀的被動更新。低詳細的3D模型用於鑄造動態陰影。
傳統的3D用多邊形渲染也得到了支持

3D渲染不如CPU上的2D或等距渲染快,但對於低詳細圖形,在1920x1080像素中通常達到60 Hz。要獲得更高的細節水平和更多功能,建議複製和修改渲染管道,以使其僅針對您想要的功能進行硬編碼,然後簡化特定渲染引擎的數學,如用於沙盒示例所需的數學,其中僅需要頂點顏色才能無透視地添加顏色,從而可以通過將顏色計算而不是從深度上進行插圖來計算,從而使顏色可以插入深度劃分。
當GPU這麼快時,為什麼要使用開源軟件渲染器?
- 使用軟件渲染器的魯棒性在犯錯時可能不會破壞您的系統,這與易於使用藍屏的GPU的圖形API不同。
- 確定性如果它在一台計算機上起作用,它可能會在另一台計算機上工作,而操作系統之間的差異很小。但是,如果您刪除任何驅動程序實現中具有錯誤的所有內容,則OpenGL的功能剩下零。
- 當您想要視覺樣式或機器人視覺的低分辨率時,低頂開銷時,當GPU變慢時,您不妨將其保持在靜態鏈接的軟件渲染器時保持最低。
- 輕鬆調試所有數據在軟件渲染器中處理時,在調試過程中查看出了什麼問題要容易得多。
- 易於修改,除了CPU週期和內存外,沒有其他硬件限制,因此您可以通過複製和粘貼代碼來修改整個渲染管道。
- 像素精確的2D,而不是對多邊形進行奇怪的解決方法,而是讓您使用整個像素來開始使用。
為什麼使用此軟件渲染器?
- 最小的系統依賴項將與特定係統API相關的所有內容都放置在單獨的包裝器模塊中,該模塊集成了最小的基本功能,這些功能應易於集成到未來的操作系統上。與其他軟件渲染器不同,該渲染器不需要任何圖形驅動程序,因為當大多數核心無論如何都閒置時,您可以通過將畫布上傳到背景線程上,從而獲得相同的性能。
- 沒有二進製文件整個庫是從源代碼自動編譯的。甚至構建系統都在構建項目之前都在自行編譯。這可以確保未來沒有人在試圖構建程序時必須逆轉工程師世紀的二進製文件,並且在所有可讀代碼都可以檢查所有內容時,它也使對惡意軟件變得更加安全。
- 靜態鏈接整個庫與您的程序靜態鏈接,就像您自己編寫了代碼一樣。僅存活數十年的核心系統API被依靠為依賴性,沒有GPU驅動程序,沒有外部媒體層。從如何編碼Unicode字符和渲染字體到對深度緩衝區的多邊形如何柵格化的所有內容都將在您編譯的C ++程序中存在,以獲得最大的可靠性和確定性。構建系統允許在可能的情況下靜態地鏈接C ++標準庫。
- 創建您的遺產製造軟件,使後代可以在不需要模擬器或專有圖形驅動程序的反向工程的情況下進行端口,編譯和運行。
該庫中的功能
- 全自動C ++構建系統不再需要項目中的源文件列表。隨附的構建系統將自動找到包含的標題及其按名稱對應的源文件。只需告訴它從Main爬網,然後自動找出其餘部分即可。通過包括圖書館的項目標頭來處理庫的不同後端,並告訴每個平台使用哪個後端。校驗和僅用於構建已更改的內容,因此無需為代碼的一部分創建靜態庫。
- 2D繪圖像素精確的標準繪圖呼叫線,矩形,實心圖像副本,alpha濾波的圖像繪圖,深度緩衝繪圖和模板圖。
- 3D渲染大致相當於Direct3d 7,使用BI線紋理採樣,MIPMAPPING,LIGHTMAPS和ALPHA過濾時,如果您可以使用盒子,但是如果您將陰影塗在紋理上,則可以更類似於直接3d 9(可以將SIMD應用於具有多線程的SIMD,並基於觀看距離進行安排)。
- 遮擋系統多線程的渲染任務收集還包含一個遮擋網格,如果您的引擎實現了用於剔除和閉合測試的寬相似,則可以繪製遮擋形狀以跳過三角形,對像或整個組的繪圖。然後,可以使用有關從每個相機位置可以看到哪些區域的信息,將這種完全動態的阻塞與特定遊戲的靜態優化結合使用。
- 可選的遠剪輯,因為此圖形API僅使用浮點深度緩衝區進行透視圖,因此無需將任何基於整數表示的深度值正常化。如果您能夠一次負擔得起整個場景,則可以在創建相機時選擇無限的遠夾距離。
- 媒體層跨平台介質層設計用於魯棒性。 ALSA和Winmm聲音後端可以完全控制聲音混合,而不必將任何特定於系統的系統調用。窗口管理使用多線程來上傳畫布,因此您不需要GPU圖形驅動程序和重型依賴項就可以上傳結果。使用無邊界窗口進行全屏,因此,如果您在後台收到重要的電子郵件或即時消息,則可以輕鬆訪問其他程序。在CPU上進行了升級,以便與任何屏幕分辨率一起使用,而無需依賴可能使像素插值錯誤或不存在的圖形驅動程序。當沒有安裝圖形驅動程序並且顯示器不接受任意選擇分辨率時,為CTR顯示的較舊媒體圖層可能會導致頻率超出範圍錯誤。使用隱形光標圖標隱藏鼠標,因此在試圖殺死該過程時,崩潰的程序不會帶走光標。
- 圖形用戶界面框架使用一行讀取佈局文件或字符串的代碼行加載視覺界面到窗口。使用名稱或名稱和索引的組合獲取構件的通用處理。通過將lambda功能附加到組件和窗口回調來添加事件。
- 計時器獲得以來第一次呼叫計時器以來的雙重精度秒,因此您不必擔心一天中的午夜錯誤。
- SIMD抽象層使用SIMD.H自動從完全可讀的數學語法中生成高效的SSE,AVX和霓虹燈。您的向量代碼看起來像是一個未知目標體系結構的參考實現和編譯,將產生標量操作,可以通過編寫算法來提供性能提升,這些操作與基本操作中最常在CPU硬件中直接支持的基本操作,從而訪問與高速緩存線相處的記憶,並與任務相似,並使其與Autive autive autive autiands相似,並使其與此相似,並使其具有相似的範圍,並與之相似。
- 安全的指針使用SafePointer.h來通過告訴指針可能會使用哪個部分來捕獲更多錯誤。發行版中沒有丟下開銷,這樣您就可以隨時用SafePointer替換原始指針,並知道當發生不好的事情時,您將獲得帶有指針名稱和詳細信息的信息性錯誤消息。
- 字符串使用UTF-32將字符存儲在內存中,以確保所有算法都與非拉丁蛋白字符(與u“”字符串文字兼容)。保存在用BOM(明確說出使用哪種格式的)和CR LF線結尾(以便在任何地方都可以讀取任何地方的文本文件)的BOM(明確說出使用哪種格式)默認為UTF-8(緊湊型存儲)。自動使用共享存儲器緩衝區,以允許將其分成字符串列表,而不會淹沒小型分組。
- 緩衝區所有文件均通過緩衝對象保存和加載。這樣可以確保您設計的所有文件格式只需要擔心如何編碼字節,而不涉及文件系統的外部副作用,回歸測試將很容易,並且可以使用相當於保存功能的緩衝區來將任何文件捆綁到您的自己中。
- 文件管理大致相當於C ++ 17的STD ::文件系統,但可與C ++ 14一起使用,在所有平台上使用相同的字符串和可REDABLESTRING類型,並且可以在 /(POSIX)和(MS-Windows)之間自動更正文件夾分離器。
- 流程管理可以啟動其他應用程序並跟踪其狀態,以便您可以像將結果寫入文件一樣調用應用程序。
許可摘要
該庫主要使用ZLIB開源許可證,但還包括用於保存和加載圖像的STB映像庫,該圖像具有允許的雙重許可證(MIT /不執行)。由於STB映像庫可以用作公共領域,因此它對在ZLIB開放源代碼許可下整體使用庫沒有任何法律效果。所有均包含及其許可證的源代碼允許商業和非商業用途,包括未公開的源代碼修改。如果您不重新分發源代碼,則不必告訴任何人使用此庫,因為Insincere認可沒有價值。
仍然是公共Beta
主題,GUI,字體和聲音API仍在積極開發中,並且在準備就緒的1.0版之前可能會發生重大變化,因為某些代碼只是一個原始的佔位符,直到高級實施可以替換它,並且必須在明顯的可用性問題變得明顯之前嘗試實際使用庫。但是,緩衝區,文件,圖像,繪製,過濾,字符串和時間API已經很穩定。您可以選擇使用每個新項目的特定版本,繼續進行最新更改,或等待穩定版本1.0。
您如何提供幫助
- 使用相同的最小依賴性原則到Macintosh或Wayland的端口。
- 測試此Beta版本,並在發布1.0版之前對設計進行反饋。
- 使用開源工具創建不同類型的遊戲引擎。
支持的CPU硬件:
- Intel/AMD使用SSE2內在和可選擴展。
- 使用霓虹燈內在的手臂。
- 未知的CPU體系結構,沒有SIMD矢量化作為後備解決方案。
平台:
- Linux ,在薄荷,伴侶,Manjaro,Ubuntu,Raspberrypi OS,Raspbian(Buster或更高版本)上進行了測試。 Linux Mint需要編譯器和X11標頭,因此在編譯之前運行“ sudo apt install g ++”和“ sudo apt install libx11-dev”。目前計劃為將來的版本提供支持X11和Wayland。
- Microsoft Windows ,但比Linux上的慢,因為Windows具有許多背景過程以及較慢的線程和內存管理。
也可能正在努力:
- BSD和Solaris的代碼針對fileapi.cpp中的平台以獲取應用程序文件夾,但是運行構建腳本可能缺少一些應用程序。如果有X11服務器,未來的POSIX系統只能有幾個怪癖。
- 如果在全球範圍內啟用DSR_BIG_ENDIAN宏觀,那麼從理論上講,Big-Endian得到了支持,但是由於與現代編譯器瞄準這樣的舊系統的困難,這實際上從未進行過測試。
尚未移植到:
- Macintosh不再使用X11,因此需要進行一些移植工作。 Macintosh沒有指向運行過程二進制的符號鏈接,因此在詢問應用程序文件夾時,它會落在當前目錄上。
不會針對:
- 智慧型手機.因為不斷變化的移動平台上的向後兼容性破壞了使用長期壽命框架的目的。移動平台需要自定義的C ++編譯器,訪問信號處理器,屏幕旋轉,節省電池,知道何時顯示虛擬鍵盤,安全許可,強迫全屏...試圖同時做到這兩種工作,最終都會出現兩個目的的折衷,例如Microsoft Windows 8或Ubuntu的Unity Lock屏幕,因此可以將其構建為新的,因此可以將其構建為新的庫。
- 網絡前端。此庫上的包裝器將無法獲得SIMD Intrinsics來定義您自己的圖像過濾器的力量,因此您最好從瀏覽器中定位GPU陰影語言,這更適合動態腳本。