本文關注的是基於SDL的OPENGL|ES(下文簡稱ES)的2D繪製的實現方式。
ES中常見的實現2D的方法是使用正投影,然後繪製2D紋理
這裏有三個問題,
其一SDL與ES的座標系統不同,SDL的(0,0)在屏幕的左上角,而ES的在屏幕的左下角,這裏可以使用上下反轉的正投影來解決,或者在每次繪製前使用如下的變換,
其二OPENGL認爲自己擁有整個屏幕,對於顯示緩存,只能使用OPENGL進行控制
其三在OPENGL與SDL之間的BLIT,當SDL選擇OPENGL模式的時候(OPENGLBLIT模式是不被推薦的)是不能之間進行的,這裏使用了技巧,是將SDL的緩存轉換成了OPENGL的材質,然後供OPENGL的2D顯示使用,如下
最後值得注意的是,ES在紋理繪製時選擇使用glDrawElements函數,其最後一個參數是索引值,由於OPENGL是狀態機驅動的,整個座標系統是提前將狀態設置好的,不用總是在困擾與這個東西是如何繪製出來,呵呵,如下是glDrawElements的使用方式