Qt Vulkan支援及Qt介面技術簡析

2021-08-13 20:01:29 字數 1914 閱讀 6045

2017-12-18

本來計畫在qt5.9版本支援vulkan的,但是跳水了乙個版本,放到了qt5.10。估計是因為5.9是長期支援版,怕vulkan帶來了不穩定性。經過了一周時間的延後,正式版本還是發布了。似乎qt vulkan支援一直是 laszlo agocs 負責的(沒有驗證),最高的實驗版本也是他給出的。

opengl很早就成為了qt的渲染核心,我想在可見的將來,應該也不會替換成其他的渲染api。但是,qt還是嘗試了可替換渲染api的整合,更早的d3d12,現在的metal,vulkan。

我們知道opengl,d3d,vulkan這樣的api,對接的是作業系統底層的視窗物件,在win32,linux,macos等上都有類似su***ce的概念。我們可以把su***ce理解為顯示器上一塊矩形畫素區域。雖然我們在使用win32介面建立視窗時並不會見到su***ce的概念,但是,我們可以把hwnd hwnd = createwindow(***) 理解為su***ce的簡單封裝,加上了minimize、close、icon、title等顯示區域和功能。相反,在linux 系統中,xlib 提供了window物件(minimize、close按鈕),和win32 api一樣不負責任何繪製操作,cairo 庫則是讓su***ce封裝了window物件,負責繪製視窗系統,qt則似乎是自己用qpainter、qpaintdevice等實現了cairo、gdi+等繪製二維圖形的功能(待驗證)。總體上來說,su***ce的概念,就是一塊矩形畫素,你可以自己操作畫素來繪製二維,甚至三維影象(),它和視窗系統系統的事件無關。

此圖也表明了qt自己重新實現了二維繪製演算法。另有文章 。vulkan現在有6中視窗拓展:

extension name

required compile time symbol

window system name

external header files used

vk_khr_android_su***ce

vk_use_platform_android_khr

android native

vk_khr_mir_su***ce

vk_use_platform_mir_khr

mirvk_khr_wayland_su***ce

vk_use_platform_wayland_khr

wayland

vk_khr_win32_su***ce

vk_use_platform_win32_khr

microsoft windows

vk_khr_xcb_su***ce

vk_use_platform_xcb_khr

x window system xcb library

vk_khr_xlib_su***ce

vk_use_platform_xlib_khr

x window system xlib library

似乎vs tools和 vs 2015之間協作還是有些問題,用vs直接建立的工程不能正確的找到vulkan相關標頭檔案,可能和沒有正確解析vulkan_sdk 環境變數有關。沒有關係,我們手動新增上vulkan include資料夾即可。由於我們並不需要鏈結vulkan的lib,所有的vulkan api都是執行時從dll中解析出來的。所以,只需要標頭檔案和安裝了vulkan sdk即可。當然了,我們也是可選鏈結vulkan lib的。

q1:cannot run compiler 'cl'. maybe you forgot to setup the environment?

a:需要把vs 2015 的cl.exe 所在路徑新增到path

12.18  p.s. 本來是只想寫qt vulkan的東西,發現能寫的實在不多,就把以前做的關於qwindow、qwidget的筆記整理了一下。跑步乙個多小時,出出汗,近十點半到家,感覺還是挺舒服的。

12.20 後續文章再仔細寫技術細節吧。

[主頁 ]

Qt中文支援

本文主要總結qt開發顯示中文和讀取含中文路徑檔案的解決方法。詳見參考資料 1 2 3 lpcwstr str lpc 中文 qdebug qstring fromwchararray str lpc 亂碼 qdebug qstring fromwchararray str lpc tostdstri...

QT中文支援(1)

qtextcodec setcodecforlocale qtextcodec codecforname utf 8 qtextcodec setcodecfortr qtextcodec codecforname utf 8 支援tr中文 qtextcodec setcodecforcstring...

Qt介面程式設計 Qt簡介

qt是什麼 為什麼選擇qt 工具 qt構建器 他負責對原始檔 標頭檔案 介面檔案進行解析生成編譯指令碼。qt設計師 對於帶介面應用程式來說,最純粹的方式是通過c c 來編寫整個專案,但這種方式費時又費力,所以我們一般不這樣做介面,而採用一種畫圖的方式,自動生成對應的 所見即所得。qt介面編譯器 它負...