因為工作需要改寫了xbmc裡面的opengl部分**,對opengl的api摸出來了些門道,寫出來與大家分享,
對自己也相當於是做個筆記。opengl api 並不多,常用的也就那麼幾個,有些api是需要搭配使用的。
最經典的搭配莫過於glbegin .. glend了。下面是我整理的幾個api搭配。
1) glbindbuffer + glvertexpointer+ glenableclientstate 的用法。
glbegin .. glend已經是不推薦使用的方法。目前強烈推薦的是 glbufferdata 搭配 glvertexpointer ,
glvertexattribpointer 同系列函式的用法。
原因是:利用glbindbuffer和glbufferdata把vertex,color等資料 copy到server端的記憶體,然後glvertexpointer
指向server端的記憶體位址。rendering 的時候能夠提高效能。
示例如下:
typedef struct _texvertex
texvertex;
glbindbuffer(gl_array_buffer, gl_buffer_id); --事先生成的buffer id。
glbufferdata(gl_array_buffer, sizeof(texvertex) * 4(實際頂點個數),
(char *)m_vertex, gl_dynamic_draw);
glvertexpointer( 3, gl_float, sizeof(texvertex), (char *)offsetof(texvertex, x));
glcolorpointer(4, gl_unsigned_byte, sizeof(texvertex), (char *)offsetof(texvertex, r));
.... 其它同系列函式
gltexcoordpointer( 2, gl_float, sizeof(texvertex), (char *)offsetof(texvertex, u1));
glclientactivetexture(gl_texture1);
gltexcoordpointer( 2, gl_float, sizeof(texvertex), (char *)offsetof(texvertex, u2));
..glclientactivetexture(gl_texturen);
gltexcoordpointer( 2, gl_float, sizeof(texvertex), (char *)offsetof(texvertex, un));
..glenableclientstate(gl_color_array);
glenableclientstate(gl_vertex_array);
.... 其它同理
glclientactivetexture(gl_texture0); ---多材質(紋理)的情況下,需要使用該函式,如果只有乙個紋理,
則可以省略。
glenableclientstate(gl_texture_coord_array);
glclientactivetexture(gl_texture1);
glenableclientstate(gl_texture_coord_array);
.... 其它同理
gldrawarrays(gl_quads, 0, 4);
gldisableclientstate(gl_vertex_array); ---根據需要不一定非要disable掉。
如果,有多個執行緒使用上述api的話,可能還有使用下面這對 api
glpushclientattrib(gl_client_vertex_array_bit);
glpopclientattrib();
2) glbindbuffer + glenablevertexattribarray + glvertexattribpointer
glbindattriblocation --- 綁定義自定義的屬性名字到乙個index.
glbindbuffer(gl_array_buffer, gl_buffer_id); --事先生成的buffer id。
glbufferdata(gl_array_buffer, sizeof(texvertex) * 4(實際頂點個數),
(char *)m_vertex, gl_dynamic_draw);
glenablevertexattribarray(glut_attribute_vertex);
glvertexattribpointer(glut_attribute_vertex, 3, gl_float, gl_false, sizeof(texvertex), (char *)offsetof(texvertex, x));
...... 其它同系列函式
gldisablevertexattribarray(glut_attribute_vertex);
...... 其它
每日乙個OpenGL API 一
首先看看函式原型 void glbufferdata glenum target,glsizeiptr size,const glvoid data,glenum usage 建立快取區物件之後,就需要空間去保留這些資料,那麼glbufferdata就來完成這個任務。官方文件是這樣寫的 create...
每日乙個OpenGL API 二
glvertexatrribpointer void glvertexattribpointer gluint index,glint size,glenum type,glboolean normalized,glsizei stride,const glvoid pointer 第一次見到這個函...
asp搭配mysql 讓ASP搭配MYSQL
讓asp搭配mysql 所需要工具 mysql 4.1.11 win32 myodbc 3.51.11 1 dll myodbc 3.51.11 1 win mysqlcc 0.9.4 win32 註冊檔案mydbc.reg regedit4 hkey local machinesoftwareod...