oglplus學習筆記 Outline

2021-06-22 00:30:29 字數 2192 閱讀 7993

最近一直在thinking inmodern c++,大部分都是使用基於物件(object based)的技術。使得物件相較於c++的物件導向風格的程式而言,物件要雜湊一些,結構更清晰。物件之間適配使用了大量的泛型程式設計(

generic programming

)技術。boost c++庫的發展和c++11語言新特性對模板的支援,優秀的泛型庫大量湧現。它們都繼承了stl極高的可復用性與很低的學習曲線。jeremy ong寫的selene庫是筆者目前閱讀過的非常精彩的modern c++風格的程式庫,但也有一些show off的感覺。還有兩個數學庫glm與mtl。

算是乙個。**並算不上是非常精彩,諸如沒有使用traits/policy程式設計技法來降低複雜性,使用了decltype關鍵字這種較為初學的泛型技術,沒有考慮空基類優化等細節問題。但也有很多出彩的地方,比如對opengl具名物件的封裝(參見模板類named)以及對opengl的operation的封裝達到完全消除對opengl api函式的裸呼叫(raw call)等。

#include #include #include #include #include class example

\ ");

vs.compile();

fs.source(" \

#version 330\n \

out vec4 fragcolor; \

void main(void) \

\");

fs.compile();

prog.attachshader(vs);

prog.attachshaders(fs);

prog.link();

prog.use();

glfloat ********_verts[9] = ;

verts.bind(buffer::target::array);

verts.data(buffer::target::array, 9, ********_verts);

vertexattribarray vert_attr(prog, "position");

vert_attr.setup(3);

vert_attr.enable();

gl.clearcolor(0.0f, 0.0f, 0.0f, 0.0f);

gl.cleardepth(1.0f);

} void display(void)

static example& getinstance() };

static void display(void)

int main(int argc, char* argv)

catch(oglplus::error& err)

return 1;

}

oglplus是型別安全的opengl包裝。opengl管理建立在opengl環境(context, 在不同實現中由不同的系統核心物件管理)下的名字物件(如buffer,texture,shader,framebuffer等,通常用乙個gluint型別的標識。這種無型別的標識使得程式在執行期出錯的機率大大增加。資源在建立時便已知其型別,使用c++型別來管理這些opengl資源,應屬上策。opengl的名字物件由oglplus::named類統一管理,這也是官網提及的資源自動管理的特性支援的基礎元件。oglplus為我們封裝了所有的opengl函式呼叫,並同時封裝了呼叫這些函式的異常處理,並丟擲c++異常。oglplus的封裝,是不是讓**變得clean了許多呢?

最後再來談談我覺得這段**乙個非常出彩的地方。就是example::display方法中的gl.clear().colorbuffer().depthbuffer()一句。這一句fluent inte***ce風格的**中的三次函式呼叫建立了三個oglplus::context::clrbits的物件,clear()建立乙個空物件為了接下來的呼叫提供inte***ce,後面依然依次建立clrbits型別的物件,並為後面的呼叫提供介面。建立的物件都是臨時物件,離開**段即進行物件的析構,而在clrbits型別的析構函式中呼叫的則是glclear方法。這是使用raii物件的良好實踐。

好了,outline先寫到這裡,modern c++設計的旅程剛剛開始。

學習筆記 雜湊學習筆記

hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...

學習筆記 CentOS 學習筆記01

簡單的做個課堂筆記 虛擬機器用的是vmware,系統是centos cd etc sysconfig network scripts pwdls 顯示列表 cat ifcfg eth0 檢視檔案內容 vi ifcfg eth0 進入vi編輯器 onboot no 原始設定 x逐字刪除 d刪除整行 a...

筆記 spring cloud 學習筆記

1 spring cloud 是什麼 spring cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具 例如配置管理,服務發現,斷路器,智慧型路由,微 控制匯流排 分布式系統的協調導致了樣板模式,使用spring cloud開發人員可以快速地支援實現這些模式的服務和應用程式。他們將在任...