openGL API 搭配講解

2021-05-24 06:29:45 字數 2508 閱讀 7375

因為工作需要改寫了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...