m_gl.BeginScene();
glewInit();
int OpenGLVersion[2];
glGetIntegerv(GL_MAJOR_VERSION, &OpenGLVersion[0]);
glGetIntegerv(GL_MINOR_VERSION, &OpenGLVersion[1]);
GLFBO m_FBO(Width,Height,0);
m_FBO.GenRenderBuffers();
m_FBO.BindDrawFBO();
m_FBO.BindReadFBO();
glViewport(0,0,Width,Height);//每次绑定都要重新设置视口
//glGenFramebuffersEXT(1,&FrameBufferObjectDrawID);
//glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, FrameBufferObjectDrawID);
//glGenFramebuffersEXT(1,&FrameBufferObjectReadID);
//glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT,FrameBufferObjectReadID);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, ShadowTex, 0);
//glGenRenderbuffersEXT(1, &RenderBufferColorID[0]);
//glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RenderBufferColorID[0]);
//glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, 16, Width, Height);
//glGenRenderbuffersEXT(1, &RenderBufferDepthID);
//glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, RenderBufferDepthID);
//glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, 16, Width, Height);
//glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, RenderBufferColorID[0]);
//glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, RenderBufferDepthID);
//bool status = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
//if (!status)
// return;
glClearColor(1.0f,1.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//一定要清理深度缓冲区,否则画不出来
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-Width/2, Width/2, -Height/2, Height/2, -20000.0f, 20000.0f);
//DrawPencilline(Width,Height,pMesh);
glBegin(GL_TRIANGLES);
glColor4f(0.0, 0.0, 1.0,1.0f);
glVertex3f(0.0 ,0.0 ,-100.0);
glVertex3f(100.0 ,100.0 ,-100.0);
glVertex3f(100.0 ,200.0 ,-100.0);
glEnd();
glFlush(); // remember to flush GL output!
glReadBuffer(GL_COLOR_ATTACHMENT0);//这句可有可无,因为默认就是GL_COLOR_ATTACHMENT0
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
GLubyte * readpixels = new GLubyte[Width*Height*4];
glReadPixels(0,0,Width,Height,GL_RGBA,GL_UNSIGNED_BYTE,readpixels);
CImagePixel img;
img.SetSize(Width,Height);
cvector<CiColor>::iterator p;
p = img.GetBuffer();
for(int j =0;j<Height;j++)
{
for (int i = 0;i<Width;i++)
{
p[j*Width+i].r = readpixels[((Height-j-1)*Width+i)*4+0];
p[j*Width+i].g = readpixels[((Height-j-1)*Width+i)*4+1];
p[j*Width+i].b = readpixels[((Height-j-1)*Width+i)*4+2];
p[j*Width+i].a = readpixels[((Height-j-1)*Width+i)*4+3];
}
}
char* name1 = new char[20];
sprintf(name1,"D://test//FBOabce%d.bmp",id);
BMPImage saver(img);
CStreamFile is(name1, CStreamFile::WRITE);
saver.Write(is);
m_gl.EndScene();
转载于:https://my.oschina.net/syhgzz/blog/287027