最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

vulkan demos & 給c++新手的代碼風(fēng)格建議

2018-02-17 21:05 作者:AICDG  | 我要投稿

vulkan的demos

開篇直接放代碼地址吧:https://github.com/THISISAGOODNAME/vulkan-tutorial-code

為了使用這個(gè)代碼,除了vulkan SDK之外,還需要安裝git和cmake

git clone --recursive https://github.com/THISISAGOODNAME/vulkan-tutorial-code.git

mkdir build

cmake -G "Visual Studio 14" ..

# OR

cmake -G "Visual Studio 14 Win64" ..



繪制三角形
開啟深度緩沖
加載模型

給新手的c++代碼風(fēng)格建議

這個(gè)風(fēng)格只是建議,如果已經(jīng)有了自己的編碼風(fēng)格,就完全沒必要改變。

vulkan

       既然是vulkan教程,那么把vulkan API的使用規(guī)范提前吧

  • 使用C風(fēng)格的vulkan API

  • 結(jié)構(gòu)體使用Vk開頭,采用駝峰命名法

  • 函數(shù)使用vk開頭,采用駝峰命名法

  • 常量使用VK_開頭,全部字母大寫,用_分隔單詞

 Note: vulkan也提供了C++風(fēng)格的接口(vulkan.hpp),但是我個(gè)人看眾多庫(kù),沒有一個(gè)使用vulkan的c++風(fēng)格接口,為了大眾化,我也使用C風(fēng)格的接口(PS:openGL的C++風(fēng)格接口也沒什么人用,都在用c風(fēng)格的接口,即便是openGL DSA,真心羨慕C#和webgl,上下文管理更清晰)

命名規(guī)范

       本命名規(guī)范大部分來自于Unreal coding standard,但是沒有F、AU那些東西,很多我可能在這個(gè)教程中并沒有用到(比如枚舉和模板)

  • 類、結(jié)構(gòu)體、全局函數(shù),使用駝峰命名法,首字母大寫

  • 結(jié)構(gòu)體變量、函數(shù),使用駝峰命名法,首字母小寫

  • 類屬性,使用駝峰命名法,以m開頭,比如mFoo,mBar

  • 類方法,使用駝峰命名法,首字母小寫

  • 常量、宏,全部字母大寫,用_分隔單詞

  • 常量?jī)?yōu)先使用const而非宏的方式聲明

  • 模板,使用駝峰命名法,以T開頭,比如TTemplateFoo

  • 枚舉值,使用駝峰命名法,以E開頭,比如EEnumBar

  • 全局變量,使用駝峰命名法,以g開頭,比如gGlobalFoo

  • 布爾型變量,使用駝峰命名法,以b開頭,比如bBollBar

  • 指針變量,使用駝峰命名法,以p開頭,比如pPtrFoo

代碼風(fēng)格

  • 代碼塊左花括號(hào){寫在新行,不寫在行尾

  • 在switch語(yǔ)句中不使用{}

  • 慎用auto關(guān)鍵字

  • 循環(huán),優(yōu)先使用Range Based For

  • 為了減少誤導(dǎo),在本教程中,不會(huì)使用C++ Lambda表達(dá)式

  • 優(yōu)先使用STL而不是自己的算法,少用指針

  • 指針置空和比較均使用nullptr而非NULL

  • 使用std::runtime_error報(bào)錯(cuò),使用try catch處理錯(cuò)誤,盡量手工處理錯(cuò)誤而不讓程序崩潰

  • 給容器賦值/取值時(shí),使用vec.data()不使用&vec

  • 枚舉必然在E開頭的命名空間中(Strongly-Typed Enums)

  • 自增運(yùn)算符++,只用在循環(huán)中做控制流,如果在while中,單獨(dú)一行

  • 對(duì)循環(huán)和函數(shù)中不變量使用const修飾

  • 使用智能指針管理變量

 Tip: 給初學(xué)者一個(gè)建議,根據(jù)情況選取最合適的容器,不要一味的使用vector和map

 Note: 本教程不使用智能指針,所有對(duì)象均手工管理內(nèi)存,實(shí)際開發(fā)中可以使用智能指針降低內(nèi)存管理的負(fù)擔(dān),但是vulkan對(duì)象生命周期比較特殊,釋放順序出錯(cuò)會(huì)直接導(dǎo)致程序崩潰,建議vulkan部分暫時(shí)手工管理,也可以參考[Vulkan Cookbook](https://www.packtpub.com/game-development/vulkan-cookbook)實(shí)現(xiàn)的VulkanDestoryer來更智能的釋放vulkan對(duì)象

shader規(guī)范

       shader規(guī)范我就隨便一,不過真的開發(fā)的話可以參考一下。這個(gè)規(guī)范是我自己總結(jié)的,自己想的,所以很不成熟,也希望大家可以一起討論。

GLSL規(guī)范

  • 常量、宏,全部字母大寫,用_分隔單詞

  • 減少全局變量的使用,全局變量使用駝峰命名法,以G開頭

  • uniform變量,使用駝峰命名法,以u開頭

  • 函數(shù),使用駝峰命名法,首字母小寫

  • 對(duì)于函數(shù),優(yōu)先使用返回值,少用inout修改參數(shù)

  • 對(duì)于桌面平臺(tái)的GLSL,建議在版本號(hào)后加上core

       對(duì)于SM3以下的feature level,只存在vertex shader和fragment shader(pixel shader)

  • attribute變量,使用駝峰命名法,以a開頭

  • varying變量,使用駝峰命名法,以v開頭

       對(duì)于SM4及以上的feature level,在必選的vertex shader和fragment shader,還有可選的geometry shader,tessellation shader和compute shader,取消attribute/varying改為in/out關(guān)鍵字,用法如下

  • in/out關(guān)鍵字在支持location時(shí)必須指明存儲(chǔ)位置

  • 在支持ubo的平臺(tái)盡可能使用ubo

  • in/out變量能表示著色器之間傳遞的順序

       解釋一下,我一般將應(yīng)用程序記為a,頂點(diǎn)著色器記為v,片元著色器記為f,幾何著色器記為g,細(xì)分著色器記為tsetsc,計(jì)算著色器記為cs。用<起點(diǎn)>2<終點(diǎn)>作為變量前綴,比如

  • a2vFoo表示應(yīng)用程序向頂點(diǎn)著色器傳遞數(shù)據(jù)

  • v2fBar表示頂點(diǎn)著色器向片元著色器傳遞數(shù)據(jù)

  • v2tseFoo表示頂點(diǎn)著色器向細(xì)分計(jì)算著色傳遞數(shù)據(jù)

  • v2tscFoo表示頂點(diǎn)著色器向細(xì)分控制著色傳遞數(shù)據(jù)

  • g2fBar表示幾何著色器向片元著色器傳遞數(shù)據(jù)

  • a2gFoo表示頂點(diǎn)著色器向幾何著色器傳遞數(shù)據(jù)

最后一些話

本來是希望完整翻譯一下 https://vulkan-tutorial.com/ 上的內(nèi)容的,結(jié)果發(fā)現(xiàn)博客園的黑桃花已經(jīng)翻譯了。那我就沒什么意思了。直接放出最終代碼棄坑算了。

現(xiàn)在手邊做這個(gè)vulkan教程還有一些零碎,有想要的評(píng)論說一下。

然后我還能做的東西:

  1. vulkan使用HLSL作為shader language的方法

  2. vulkan使用幀調(diào)試器調(diào)試的

  3. metal的基礎(chǔ)教程

如果這三個(gè)有想看的也在評(píng)論里寫一下吧。不過本來也沒幾個(gè)人關(guān)注的東西,有沒有評(píng)論還真不好說啊[笑哭]


vulkan demos & 給c++新手的代碼風(fēng)格建議的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
玛沁县| 交城县| 普兰县| 澎湖县| 邢台市| 三门峡市| 侯马市| 皮山县| 尚义县| 巴彦淖尔市| 鹤壁市| 陆良县| 新河县| 垦利县| 西昌市| 阿鲁科尔沁旗| 旺苍县| 万全县| 苗栗市| 泸西县| 昭觉县| 新兴县| 克山县| 南康市| 灵台县| 景谷| 新河县| 永修县| 宁海县| 桦甸市| 富锦市| 阆中市| 花莲县| 丹江口市| 丽水市| 奉贤区| 扎兰屯市| 镇平县| 巫山县| 安塞县| 平安县|