Opengl缓冲区

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. {  
  2.     1:顶点缓冲区 GL_ARRAY_BUFFER  
  3.     2:索引缓冲区 GL_ELEMENT_ARRAY_BUFFER  
  4.     3:帧缓冲区 GL_FRAMEBUFFER/GL_RENDERBUFFER  
  5.     4:封装  
  6. }  
 

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. {1:顶点缓冲区 GL_ARRAY_BUFFER  
  2.       
  3.     OpenGL-ES 中 Vertex Arrays/Buffer Objects 在这个阶段发生  
  4.   
  5.     struct VX{  
  6.         float x, y, z;  
  7.         float u,v;  
  8.         float r, g, b,a;  
  9.     };  
  10.   
  11.     float zOff=-2.1f;  
  12.     VX vertexs[] ={  
  13.         { -1.0f,-1.0f, zOff,    0.0f,0.0f,  1.0f,1.0f, 1.0f,1.0f },  
  14.         {  1.0f,-1.0f, zOff,    1.0f,0.0f,  1.0f,1.0f, 1.0f,1.0f },  
  15.         {  1.0f, 1.0f, zOff,    1.0f,1.0f,  1.0f,1.0f, 1.0f,1.0f },  
  16.   
  17.         { -1.0f,-1.0f, zOff,    0.0f,0.0f,  1.0f,1.0f, 1.0f,1.0f },  
  18.         {  1.0f, 1.0f, zOff,    1.0f,1.0f,  1.0f,1.0f, 1.0f,1.0f },  
  19.         { -1.0f, 1.0f, zOff,    0.0f,1.0f,  1.0f,1.0f, 1.0f,1.0f },  
  20.     };  
  21.   
  22.     unsigned vbId; //数据id  
  23.   
  24.     {创建数据  
  25.         glGenBuffers(1,&vbId);  
  26.         glBindBuffer(GL_ARRAY_BUFFER,vbId); //绑定/取消缓冲区  
  27.         glBufferData(GL_ARRAY_BUFFER,sizeof(vertexs),vertexs,GL_STATIC_DRAW);//设置缓冲区数据  
  28.         glBindBuffer(GL_ARRAY_BUFFER,0);//绑定/取消缓冲区  
  29.     }  
  30.   
  31.     {使用数据  
  32.         glBindBuffer(GL_ARRAY_BUFFER,vbId);//绑定/取消缓冲区  
  33.         glVertexAttribPointer(shader._position,3,  GL_FLOAT,   false,  sizeof(VX),(void*)0);  
  34.         glVertexAttribPointer(shader._tpos,    2,  GL_FLOAT,   false,  sizeof(VX),(void*)(3*sizeof(float)));  
  35.         glVertexAttribPointer(shader._color,   4,  GL_FLOAT,   false,  sizeof(VX),(void*)(3*sizeof(float)+2*sizeof(float)));  
  36.         glDrawArrays(GL_TRIANGLES,0,6);//三角形 (三个点画一个三角形)  
  37.         glBindBuffer(GL_ARRAY_BUFFER,0);//绑定/取消缓冲区 注意:使用完就制空,OpenGL-ES是状态机  
  38.     }  
  39.   
  40.     切记:缓冲数据在什么地方用在什么地方制空,不指空的话,下面的数据全是这个缓冲数据  
  41.   
  42.     注意:  
  43.         glBufferData(,size,,) size->sizeof(vertexs)是数据大小不是偏移量大小  
  44.         glVertexAttribPointer (,,,,stride,);stride->sizeof(VX)是偏移量大小不是数据大小  
  45.   
  46. }  

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. {2:索引缓冲区 GL_ELEMENT_ARRAY_BUFFER  
  2.     OpenGL-ES 中 Vertex Arrays/Buffer Objects 在这个阶段发生  
  3.   
  4.     unsigned ibId; //数据id  
  5.     {创建数据  
  6.         glGenBuffers(1,&ibId);  
  7.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibId); //绑定/取消缓冲区  
  8.         glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(vertexs),vertexs,GL_STATIC_DRAW);//设置缓冲区数据  
  9.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0); //绑定/取消缓冲区  
  10.     }  
  11.   
  12.     {使用数据  
  13.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibId);//绑定/取消缓冲区  
  14.         glDrawElements(绘制模式,绘制数据大小,数据类型,);  
  15.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);//绑定/取消缓冲区 注意:使用完就制空,OpenGL-ES是状态机  
  16.     }  
  17.   
  18.     {code  
  19.         struct Vertex {  
  20.             float x, y, z;  
  21.             float u,v;  
  22.             float r, g, b,a;  
  23.         };  
  24.         Vertex positionData[] = {  
  25.             -1.0f, 1.0f,-1.0f,      0.0f,0.0f,     1.0f, 1.0f, 1.0f,1.0f, //  上左后  
  26.             -1.0f, 1.0f, 1.0f,      0.0f,1.0f,     1.0f, 1.0f, 1.0f,1.0f, //  上左前  
  27.             1.0f, 1.0f,-1.0f,       1.0f,0.0f,     1.0f, 1.0f, 1.0f,1.0f, //  上右后  
  28.             1.0f, 1.0f, 1.0f,       1.0f,1.0f,     1.0f, 1.0f, 1.0f,1.0f, //  上右前  
  29.             -1.0f,-1.0f,-1.0f,      0.0f,0.0f,     1.0f, 1.0f, 1.0f,1.0f, //  下左后  
  30.             -1.0f,-1.0f, 1.0f,      0.0f,1.0f,     1.0f, 1.0f, 1.0f,1.0f, //  下左前  
  31.             1.0f,-1.0f,-1.0f,       1.0f,0.0f,     1.0f, 1.0f, 1.0f,1.0f, //  下右后  
  32.             1.0f,-1.0f, 1.0f,       1.0f,1.0f,     1.0f, 1.0f, 1.0f,1.0f  //  下右前  
  33.         };  
  34.         byte indexData[]={  
  35.             0,1,2,2,3,1,  //上  
  36.             0,4,5,5,2,0,  //左  
  37.             0,4,6,6,2,0,  //后  
  38.             2,7,6,6,2,3,  //右  
  39.             1,5,7,7,2,1,  //前  
  40.             4,5,6,6,7,4,  //下  
  41.         };  
  42.   
  43.   
  44.         unsigned  vbId;//顶点缓冲区 id  
  45.         unsigned  ibId;//索引缓冲区 id  
  46.   
  47.         //顶点缓冲区 id  
  48.         glGenBuffers(1,&vbId);  
  49.         glBindBuffer(GL_ARRAY_BUFFER,vbId);  
  50.         glBufferData(GL_ARRAY_BUFFER,sizeof(positionData),positionData,GL_STATIC_DRAW);  
  51.         glBindBuffer(GL_ARRAY_BUFFER,0);  
  52.   
  53.         //索引缓冲区 id  
  54.         glGenBuffers(1,&ibId);  
  55.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibId);  
  56.         glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indexData),indexData,GL_STATIC_DRAW);  
  57.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);  
  58.   
  59.         实例1  
  60.         glBindBuffer(GL_ARRAY_BUFFER,vbId);  
  61.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,ibId);  
  62.         ...  
  63.         glVertexAttribPointer(shader._position,3,  GL_FLOAT,   false,  sizeof(Vertex),(void*)0);  
  64.         glVertexAttribPointer(shader._tpos,    2,  GL_FLOAT,   false,  sizeof(Vertex),(void*)(3*sizeof(float)));  
  65.         glVertexAttribPointer(shader._color,   4,  GL_FLOAT,   false,  sizeof(Vertex),(void*)(3*sizeof(float)+2*sizeof(float)));  
  66.   
  67.         glDrawElements(GL_TRIANGLES,sizeof(indexData)/sizeof(indexData[0]),GL_UNSIGNED_BYTE,0);  
  68.   
  69.         glBindBuffer(GL_ARRAY_BUFFER,0);  
  70.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);  
  71.   
  72.         实例2  
  73.         ...  
  74.         glVertexAttribPointer(shader._position,3,  GL_FLOAT,   false,  sizeof(Vertex),(void*)0);  
  75.         glVertexAttribPointer(shader._tpos,    2,  GL_FLOAT,   false,  sizeof(Vertex),(void*)(3*sizeof(float)));  
  76.         glVertexAttribPointer(shader._color,   4,  GL_FLOAT,   false,  sizeof(Vertex),(void*)(3*sizeof(float)+2*sizeof(float)));  
  77.   
  78.         glDrawElements(GL_TRIANGLES,sizeof(indexData)/sizeof(indexData[0]),GL_UNSIGNED_BYTE,indexData);  
  79.   
  80.         glBindBuffer(GL_ARRAY_BUFFER,0);  
  81.   
  82.     }  
  83.   
  84. }  

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. {3:帧缓冲区 GL_FRAMEBUFFER/GL_RENDERBUFFER  
  2.     OpenGL-ES 中 Framebuffer 在这个阶段发生  
  3.   
  4.     {  
  5.         1:创建一张帧缓冲大小  
  6.         2:把要画的东西画的一张纹理上(帧缓冲和纹理id绑定)  
  7.         3:渲染这种纹理  
  8.     }  
  9.   
  10.     {code  
  11.   
  12.         struct FBO{  
  13.             unsigned fb;//帧缓冲  
  14.             unsigned rb;//渲染缓冲  
  15.         };  
  16.   
  17.         FBO createFBO(int width,int height){  
  18.             FBO frb;  
  19.             glGenFramebuffers(1,&frb.fb);//生成帧缓冲的索引  
  20.             glBindFramebuffer(GL_FRAMEBUFFER,frb.fb);//绑定帧缓冲  
  21.   
  22.             glGenRenderbuffers(1,&frb.rb);//生成渲染缓冲的索引  
  23.             glBindRenderbuffer(GL_RENDERBUFFER,frb.rb);//绑定渲染缓冲  
  24.   
  25.             /** 绘制渲染缓冲区的存储大小 
  26.              * @param  target  类型(GL_RENDERBUFFER ...) 
  27.              * @param  internalformat 存储数据格式(GL_DEPTH_COMPONENT16 深度信息) 
  28.              * @param  width 存储的宽 
  29.              * @param  height 存储的高 
  30.              */  
  31.             glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT16,width,height);  
  32.   
  33.             glBindRenderbuffer(GL_RENDERBUFFER,0);  
  34.   
  35.             /** 帧缓冲区与渲染缓冲区绑定 
  36.              * @param  target  帧缓冲区类型(GL_FRAMEBUFFER 帧缓冲区) 
  37.              * @param  attachment  关联的类型(GL_DEPTH_ATTACHMENT 深度) 
  38.              * @param  renderbuffertarget  渲染缓冲区类型(GL_RENDERBUFFER 渲染缓冲区) 
  39.              * @param  renderbuffer  渲染缓冲区id 
  40.              */  
  41.             glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,frb.rb);  
  42.   
  43.             glBindFramebuffer(GL_FRAMEBUFFER,0);  
  44.   
  45.             return frb;  
  46.         }  
  47.   
  48.         void beginFBO(unsigned fboId,uniform textureId){  
  49.             glBindFramebuffer(GL_FRAMEBUFFER,fboId);  
  50.             /** 帧缓冲区数据渲染到纹理上 
  51.              * @param  target 帧缓冲类型(GL_RENDERBUFFER ...) 
  52.              * @param  attachment 缓存区类型 (GL_COLOR_ATTACHMENT0 颜色缓存区) 
  53.              * @param  textarget 纹理类型 (GL_TEXTURE_2D ...) 
  54.              * @param  texture 纹理id 
  55.              * @param  level 层级别(数据渲染到纹理的什么层级别上) 
  56.              */  
  57.             glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,textureId,0);  
  58.         }  
  59.         void endFBO(){  
  60.             glBindFramebuffer(GL_FRAMEBUFFER,0);  
  61.         }  
  62.   
  63. 1:创建一张帧缓冲大小  
  64.         FBO  fboId;  
  65.         unsigned textureFboId;//帧缓冲数据保存到这张纹理上  
  66.   
  67.         {//帧缓冲区  
  68.             fboId=createFBO(_width,_height);  
  69.             textureFboId=createTexture(_width,_height);  
  70.         }  
  71. 2:把要画的东西画的一张纹理上(帧缓冲和纹理id绑定)  
  72.         beginFBO(fboId.fb,textureFboId);  
  73.             .... //所以要添加到帧缓冲的数据  
  74.         endFBO();  
  75. 3:渲染这种纹理  
  76.         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  
  77.         //设置视口的大小  
  78.         glViewport(0,0,_width,_height);  
  79.         shader.begin();  
  80.                   
  81.             glBindTexture(GL_TEXTURE_2D,textureFboId);  
  82.             CELL::matrix4 mat=CELL::ortho<float>(0,(float)_width,(float)_height,0,-100,100);  
  83.             glUniformMatrix4fv(shader._MVP,1,false,mat.data());  
  84.   
  85.             glVertexAttribPointer(shader._position,3,GL_FLOAT,false,sizeof(Vertex),&xt[0].pos);  
  86.             glVertexAttribPointer(shader._tpos,2,GL_FLOAT,false,sizeof(Vertex),&xt[0].uvpos);  
  87.             glVertexAttribPointer(shader._color,4,GL_FLOAT,false,sizeof(Vertex),&xt[0].rgba);  
  88.             glDrawArrays(GL_TRIANGLE_STRIP,0,sizeof(xt)/sizeof(xt[0]));  
  89.   
  90.         shader.end();  
  91.     }  
  92.   
  93. }  
 

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. {4:封装  
  2.     VertexBuffer 顶点缓冲区  create,begin,end  
  3.     ElementBuffer 创建索引缓冲区  create,begin,end  
  4.     FrameBefferObject 帧缓冲  create,begin,end  
  5. }  
  6.   
  7. //DataBuffer.hpp  
  8. #pragma once  
  9. #include "gles2/gl2.h"  
  10.   
  11.   
  12. class DataBuffer {  
  13. public:  
  14.     virtual~DataBuffer() {};  
  15.     virtual void begin() = 0;  
  16.     virtual void end() = 0;  
  17.     virtual void destroy() = 0;//销毁  
  18. protected:  
  19.     DataBuffer() {};  
  20. private:  
  21.   
  22. };  
  23.   
  24.   
  25. /** 顶点缓冲区  
  26. *   struct VX{  
  27. *       float x, y, z;  
  28. *       float u,v;  
  29. *       float r, g, b,a;  
  30. *   };  
  31. *   VX vertexs[] ={  
  32. *       { -1.0f,-1.0f, zOff,    0.0f,0.0f,  1.0f,1.0f, 1.0f,1.0f },  
  33. *       {  1.0f,-1.0f, zOff,    1.0f,0.0f,  1.0f,1.0f, 1.0f,1.0f }  
  34. *   }  
  35. *   //创建  
  36. *   VertexBuffer vbId=VertexBuffer::create(sizeof(vertexs),vertexs,GL_STATIC_DRAW);  
  37. *   //使用  
  38. *   vbId.begin();  
  39. *       ...使用过程  
  40. *       glVertexAttribPointer(shader._position,3,  GL_FLOAT,   false,  sizeof(VX),(void*)0);  
  41. *       glVertexAttribPointer(shader._tpos,    2,  GL_FLOAT,   false,  sizeof(VX),(void*)(3*sizeof(float)));  
  42. *       //glVertexAttribPointer(shader._position,3,  GL_FLOAT,   false,  sizeof(VX),vertexs[0].x);  
  43. *       //glVertexAttribPointer(shader._tpos,    2,  GL_FLOAT,   false,  sizeof(VX),vertexs[0].u);  
  44. *   vbId.end();  
  45. */  
  46. class VertexBuffer :public DataBuffer {  
  47. public:  
  48.     unsigned vbId;  
  49. public:  
  50.     virtual~VertexBuffer() {}  
  51.   
  52.     /** 创建顶点缓冲区  
  53.     * @param  dataSize 数据大小  
  54.     * @param  data     数据  
  55.     * @param  dataType  
  56.     *       GL_STREAM_DRAW   偶尔需要改动数据  
  57.     *       GL_STATIC_DRAW   不改动(静态的)数据  
  58.     *       GL_DYNAMIC_DRAW  经常改动(动态的)数据  
  59.     * @return          [description]  
  60.     */  
  61.     static VertexBuffer  create(int dataSize, void *data, int dataType = GL_STATIC_DRAW) {  
  62.         VertexBuffer vb;  
  63.         glGenBuffers(1, &vb.vbId);  
  64.         glBindBuffer(GL_ARRAY_BUFFER, vb.vbId); //绑定/取消缓冲区  
  65.         glBufferData(GL_ARRAY_BUFFER, dataSize, data, dataType);//设置缓冲区数据(更新全部数据)  
  66.         //glBufferSubData(GL_ARRAY_BUFFER, offset, size, data);//设置缓冲区数据(更新局部数据)  
  67.         glBindBuffer(GL_ARRAY_BUFFER, 0);//绑定/取消缓冲区  
  68.         return vb;  
  69.     }  
  70.     virtual void begin() {  
  71.         glBindBuffer(GL_ARRAY_BUFFER, vbId); //绑定/取消缓冲区  
  72.     }  
  73.     virtual void end() {  
  74.         glBindBuffer(GL_ARRAY_BUFFER, 0); //绑定/取消缓冲区  
  75.     }  
  76.     virtual void destroy() {  
  77.         glDeleteBuffers(1, &vbId);  
  78.     }  
  79. public:  
  80.     VertexBuffer() {}  
  81. };  
  82.   
  83. /** 创建索引缓冲区  
  84. *   byte indexData[] = {  
  85. *       0, 1, 2, 2, 3, 0,  //上  
  86. *       0, 4, 5, 5, 1, 0,  //左  
  87. *       0, 4, 6, 6, 3, 0,  //后  
  88. *       2, 7, 6, 6, 3, 2,  //右  
  89. *       1, 5, 7, 7, 2, 1,  //前  
  90. *       4, 5, 7, 7, 6, 4,  //下  
  91. *   };  
  92. *  
  93. *   //创建  
  94. *   int drawSize = sizeof(indexData) / sizeof(indexData[0]);  
  95. *   ElementBuffer eb= ElementBuffer::create(drawSize,sizeof(indexData),indexData,GL_STATIC_DRAW);  
  96. *   //使用  
  97. *   eb.begin();  
  98. *       ...使用过程(注意 顶点说索引同时使用eb.data 就不许添了,添0就可以了)  
  99. *       glDrawElements(GL_TRIANGLES, eb.drawSize, GL_UNSIGNED_BYTE, eb.data);  
  100. *   eb.end();  
  101. */  
  102. class ElementBuffer :public DataBuffer {  
  103. public:  
  104.     unsigned ebId;  
  105.     int drawSize;//渲染数据个数  
  106.     void *data;//数据  
  107. public:  
  108.     virtual~ElementBuffer() {}  
  109.   
  110.     /** 创建索引缓冲  
  111.     * @param  drawSize 渲染数据个数  
  112.     * @param  dataSize 数据大小  
  113.     * @param  data     数据  
  114.     * @param  dataType  
  115.     GL_STREAM_DRAW   偶尔需要改动数据  
  116.     GL_STATIC_DRAW   不改动(静态的)数据  
  117.     GL_DYNAMIC_DRAW  经常改动(动态的)数据  
  118.     * @return          [description]  
  119.     */  
  120.     static ElementBuffer  create(int drawSize, int dataSize, void *data, int dataType = GL_STATIC_DRAW) {  
  121.         ElementBuffer eb;  
  122.         eb.drawSize = drawSize;  
  123.         eb.data = data;  
  124.         glGenBuffers(1, &eb.ebId);  
  125.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eb.ebId); //绑定/取消缓冲区  
  126.         glBufferData(GL_ELEMENT_ARRAY_BUFFER, dataSize, data, dataType);//设置缓冲区数据(更新全部数据)  
  127.         //glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, offset, size, data);//设置缓冲区数据(更新局部数据)  
  128.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //绑定/取消缓冲区  
  129.   
  130.         return eb;  
  131.     }  
  132.     virtual void begin() {  
  133.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebId); //绑定/取消缓冲区  
  134.     }  
  135.     virtual void end() {  
  136.         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); //绑定/取消缓冲区  
  137.     }  
  138.     virtual void destroy() { glDeleteBuffers(1, &ebId); }  
  139. public:  
  140.     ElementBuffer() {  
  141.         drawSize = -1;  
  142.         data = NULL;  
  143.     }  
  144.   
  145. };  
  146.   
  147. /** 帧缓冲  
  148. *   FrameBefferObject fboId=FrameBefferObject::create(100,100);  
  149. *   fboId.begin(textureFboId);  
  150. *       .... //所以要添加到帧缓冲的数据  
  151. *   fboId.end();  
  152. *   最后画这张 textureFboId 纹理就可以了  
  153. */  
  154. class FrameBefferObject {  
  155. public:  
  156.     unsigned fb;//帧缓冲  
  157.     unsigned rb;//渲染缓冲  
  158.   
  159. public:  
  160.     virtual ~FrameBefferObject() {}  
  161.     static FrameBefferObject  create(int width, int height) {  
  162.         FrameBefferObject frb;  
  163.         glGenFramebuffers(1, &frb.fb);//生成帧缓冲的索引  
  164.         glBindFramebuffer(GL_FRAMEBUFFER, frb.fb);//绑定帧缓冲  
  165.   
  166.         glGenRenderbuffers(1, &frb.rb);//生成渲染缓冲的索引  
  167.         glBindRenderbuffer(GL_RENDERBUFFER, frb.rb);//绑定渲染缓冲  
  168.   
  169.         /** 绘制渲染缓冲区的存储大小  
  170.         * @param  target  类型(GL_RENDERBUFFER ...)  
  171.         * @param  internalformat 存储数据格式(GL_DEPTH_COMPONENT16 深度信息)  
  172.         * @param  width 存储的宽  
  173.         * @param  height 存储的高  
  174.         */  
  175.         glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);  
  176.   
  177.         glBindRenderbuffer(GL_RENDERBUFFER, 0);  
  178.   
  179.         /** 帧缓冲区与渲染缓冲区绑定  
  180.         * @param  target  帧缓冲区类型(GL_FRAMEBUFFER 帧缓冲区)  
  181.         * @param  attachment  关联的类型(GL_DEPTH_ATTACHMENT 深度)  
  182.         * @param  renderbuffertarget  渲染缓冲区类型(GL_RENDERBUFFER 渲染缓冲区)  
  183.         * @param  renderbuffer  渲染缓冲区id  
  184.         */  
  185.         glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, frb.rb);  
  186.   
  187.         glBindFramebuffer(GL_FRAMEBUFFER, 0);  
  188.   
  189.         return frb;  
  190.     }  
  191.   
  192.     virtual void begin(unsigned textureId) {  
  193.         glBindFramebuffer(GL_FRAMEBUFFER, fb);  
  194.         /** 帧缓冲区数据渲染到纹理上  
  195.         * @param  target 帧缓冲类型(GL_RENDERBUFFER ...)  
  196.         * @param  attachment 缓存区类型 (GL_COLOR_ATTACHMENT0 颜色缓存区)  
  197.         * @param  textarget 纹理类型 (GL_TEXTURE_2D ...)  
  198.         * @param  texture 纹理id  
  199.         * @param  level 层级别(数据渲染到纹理的什么层级别上)  
  200.         */  
  201.         glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureId, 0);  
  202.     }  
  203.   
  204.     virtual void end() {  
  205.         glBindFramebuffer(GL_FRAMEBUFFER, 0);  
  206.     }  
  207.     virtual void destroy() {  
  208.         glDeleteRenderbuffers(1, &rb);  
  209.         glDeleteFramebuffers(1, &fb);  
  210.     }  
  211. public:  
  212.     FrameBefferObject() {}  
  213.   
  214. };  

源码地址

http://pan.baidu.com/s/1geVargZ   缓冲区.zip

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. main.cpp  
  2.     //头文件不能都开,里面有重复定义的类或函数,不解释了自己看吧  
  3.     //#include "VertexBufferWin.hpp"  
  4.     //#include "ElementWin.hpp"  
  5.     #include "FraneBufferWin.hpp"   
  6.   
  7.     //VertexBufferWin app(hInstance);//顶点缓冲区数据  
  8.     //ElementWin app(hInstance);//索引缓冲区数据  
  9.     FraneBufferWin app(hInstance);//帧缓冲  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值