国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Opengl學習程序之渲染緩存

2019-11-08 03:08:57
字體:
來源:轉載
供稿:網友

實現程序:

#include "stdafx.h"#include<iostream>using namespace std;#include "vgl.h"#include "LoadShaders.h"enum{Color,Depth,NumRenderbuffers};GLuint framebuffer, renderbuffer[NumRenderbuffers];void init(void){ //void glGenRenderbuffers(GLsizei n,GLuint* ids) //分配n個未使用的渲染緩存對象名稱,并且將他們保存到ids中。對象必須關聯到glBindRenderbuffer()之后才能使用。 glGenRenderbuffers(NumRenderbuffers, renderbuffer); //void glBindRenderbuffer(GLenum target,GLuint renderbuffer) //創建并綁定一個名稱為renderbuffer的渲染緩存。target必須是GL_RENDERBUFFER,而renderbuffer可以是0,即移除當前的綁定, //也可以是glGenRenderbuffers()所生成的一個名稱;否則系統將產生一個GL_INVALID_OperaTION錯誤。 glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer[Color]); //void glRenderbufferStorage(GLenum target,GLenum internalformat,GLsizei width,GLsizei height) //為當前綁定的渲染緩存分配圖像數據的空間。target必須是GL_RENDERBUFFER.width和height用來設置渲染緩存的像素大小。 glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 256, 256); glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer[Depth]); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 256, 256); //void glGenFramebuffers(GLsizei n,GLuint* ids) //分配n個未使用的幀緩存對象名稱,并且將他們存儲到ids中 //如果n為負數,那么將產生一個GL_INVALID_VALUE錯誤。 glGenFramebuffers(1, &framebuffer); //void glBindFramebuffer(GLenum target,GLuint framebuffer) //設置一個可讀或者可寫的幀緩存。如果target為GL_DRAW_FRAMEBUFFER,那么framebuffer設置的是繪制時的目標幀緩存。類似的 //如果target設置為GL_READ_FRAMEBUFFER,那么framebuffer就是讀取操作的數據源。如果target設置為GL_FRAMEBUFFER,那么framebuffer //所設置的幀緩存是可讀也可寫的。如果framebuffer設置為0的話,表示將目標綁定到默認的窗口系統幀緩存,或者設置為一個 //glGenFramebuffers()生成的幀緩存對象。 //如果framebuffer不是0也不是一個可用的幀緩存對象(可用的對象是通過glGenFramebuffers()生成的,并且沒有被glDeleteFramebuffers() //所釋放),那么將產生一個GL_INVALID_OPERATION錯誤。 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer); //void glFramebufferRenderbuffer(GLenum target,GLenum attachment,GLenum renderbuffertarget,GLuint renderbuffer) //將渲染緩存renderbuffer關聯到當前綁定的幀緩存對象的附件attachment上。target必須是GL_READ_FRAMEBUFFER,GL_DRAW_FRAMEBUFFER或者 //GL_FRAMEBUFFER(等價于GL_DRAW_FRAMEBUFFER) //attachment必須是GL_COLOR_ATTACHMENTi,GL_DEPTH_ATTACHMENT,GL_STENCIL_ATTACHMENT或者GL_DEPTH_STENCIL_ATTACHMENT. //renderbuffertarget必須設置為GL_RENDERBUFFER,而renderbuffer必須是0(表示將附件所關聯的渲染緩存移除)或者是glGenRenderbuffers() //生成的渲染緩存名稱,否則會產生一個GL_INVALID_OPERATION錯誤。 glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer[Color]); glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer[Depth]); glEnable(GL_DEPTH_TEST);}void display(void){ //準備渲染到渲染緩存中 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer); glViewport(0, 0, 256, 256); //渲染到渲染緩存 glClearColor(1.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //設置從渲染緩存讀取,然后繪制到窗口系統的幀緩存中 glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glViewport(0, 0, 512, 512); glClearColor(0.0, 0.0, 1.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /*執行拷貝操作*/ glBlitFramebuffer(0, 0, 255, 255, 0, 0, 255, 255, GL_COLOR_BUFFER_BIT, GL_NEAREST); //交換兩個緩沖區指針。 glutSwapBuffers();}int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA); glutInitWindowSize(512, 512); glutCreateWindow(argv[0]); glewExperimental = GL_TRUE; if (glewInit()) { cerr << "Unable to initialize GLEW ... exiting" << endl; exit(EXIT_FAILURE); } init(); glutDisplayFunc(display); glutMainLoop();}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿克苏市| 晋州市| 浏阳市| 山东| 大同市| 延川县| 延寿县| 桃园市| 汾西县| 西吉县| 岳西县| 越西县| 天水市| 嫩江县| 五大连池市| 汉川市| 贵南县| 玉林市| 尉犁县| 巴彦淖尔市| 岢岚县| 湖南省| 石家庄市| 海安县| 宜君县| 临江市| 罗江县| 乌审旗| 芜湖县| 苍梧县| 临猗县| 商都县| 平谷区| 长岭县| 开封县| 湘西| 石渠县| 江达县| 西青区| 靖边县| 绥棱县|