/*
Copyright 2011 Etay Meiri
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program.If not, see
*/
#include headers.h
#include gbuffer.h
GBuffer::GBuffer( unsigned int width, unsigned int height, int nTextures, GLFWwindow *window )
{
// Check that we can attach at least 5 FBOs
GLint maxAttachments;
glGetIntegerv( GL_MAX_COLOR_ATTACHMENTS, &maxAttachments );
if (maxAttachments < 5) {cerr << “Can only attach ” << maxAttachments << ” to an FBO in this version of OpenGL, but 5 are needed.” << endl;exit(1);}// Get framebuffer size (which can be DIFFERENT than the window size, and *is* different on Macs!)glfwGetFramebufferSize( window, &fbWidth, &fbHeight );numTextures = nTextures;// Create the FBOglGenFramebuffers( 1, &FBO );glBindFramebuffer( GL_FRAMEBUFFER, FBO );// Create the gbuffer texturestextures = new GLuint[ numTextures ];glGenTextures( numTextures, textures );for (int i = 0 ; i < numTextures; i++) {glBindTexture( GL_TEXTURE_2D, textures[i] );glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB16F, fbWidth, fbHeight, 0, GL_RGB, GL_FLOAT, NULL );glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, textures[i], 0 );}// depthglGenTextures( 1, &depthTexture );glBindTexture( GL_TEXTURE_2D, depthTexture );glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, fbWidth, fbHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL );glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );glFramebufferTexture2D( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0 );// Declare the drawBuffersGLenum *drawBuffers = new GLenum[numTextures];for (int i=0; i
Reviews
There are no reviews yet.