QGLFramebufferObjectPrivate Class Reference

Collaboration diagram for QGLFramebufferObjectPrivate:

Collaboration graph
[legend]
List of all members.

Detailed Description

Definition at line 235 of file qglframebufferobject.cpp.

Public Member Functions

 QGLFramebufferObjectPrivate ()
 ~QGLFramebufferObjectPrivate ()
void init (const QSize &sz, GLenum texture_target)
bool checkFramebufferStatus () const

Public Attributes

GLuint texture
GLuint fbo
GLuint depth_buffer
GLenum target
QSize size
uint valid: 1
QGLContextctx


Constructor & Destructor Documentation

QGLFramebufferObjectPrivate::QGLFramebufferObjectPrivate (  )  [inline]

Definition at line 238 of file qglframebufferobject.cpp.

00238 : valid(false), ctx(0) {}

QGLFramebufferObjectPrivate::~QGLFramebufferObjectPrivate (  )  [inline]

Definition at line 239 of file qglframebufferobject.cpp.

00239 {}


Member Function Documentation

void QGLFramebufferObjectPrivate::init ( const QSize sz,
GLenum  texture_target 
)

Definition at line 293 of file qglframebufferobject.cpp.

References checkFramebufferStatus(), ctx, QGLContext::currentContext(), depth_buffer, fbo, QGLExtensions::FramebufferObject, GL_CLAMP_TO_EDGE, GL_COLOR_ATTACHMENT0_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_FRAMEBUFFER_EXT, GL_RENDERBUFFER_DEPTH_SIZE_EXT, GL_RENDERBUFFER_EXT, glBindFramebufferEXT, glBindRenderbufferEXT, QGLExtensions::glExtensions, glFramebufferRenderbufferEXT, glFramebufferTexture2DEXT, glGenFramebuffersEXT, glGenRenderbuffersEXT, glGetRenderbufferParameterivEXT, glIsRenderbufferEXT, glRenderbufferStorageEXT, QSize::height(), i, NULL, QT_CHECK_GLERROR, qt_resolve_framebufferobject_extensions(), size, target, texture, valid, and QSize::width().

00294 {
00295     ctx = const_cast<QGLContext *>(QGLContext::currentContext());
00296     bool ext_detected = (QGLExtensions::glExtensions & QGLExtensions::FramebufferObject);
00297     if (!ext_detected || (ext_detected && !qt_resolve_framebufferobject_extensions(ctx)))
00298         return;
00299 
00300     size = sz;
00301     target = texture_target;
00302     // texture dimensions
00303 
00304     glGetError(); // reset error state
00305     glGenFramebuffersEXT(1, &fbo);
00306     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
00307 
00308     QT_CHECK_GLERROR();
00309     // init texture
00310     glGenTextures(1, &texture);
00311     glBindTexture(target, texture);
00312 #ifndef Q_WS_QWS
00313     glTexImage2D(target, 0, GL_RGBA8, size.width(), size.height(), 0,
00314                  GL_RGBA, GL_UNSIGNED_BYTE, NULL);
00315 #else
00316     glTexImage2D(target, 0, GL_RGBA, size.width(), size.height(), 0,
00317                  GL_RGBA, GL_UNSIGNED_BYTE, NULL);
00318 #endif
00319     glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
00320     glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
00321     glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
00322     glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
00323 
00324     glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
00325                               target, texture, 0);
00326 
00327     QT_CHECK_GLERROR();
00328     valid = checkFramebufferStatus();
00329 
00330 #ifdef DEPTH_BUFFER
00331     // depth buffer
00332     glGenRenderbuffersEXT(1, &depth_buffer);
00333     Q_ASSERT(!glIsRenderbufferEXT(depth_buffer));
00334     glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_buffer);
00335     Q_ASSERT(glIsRenderbufferEXT(depth_buffer));
00336     glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, size.width(), size.height());
00337     int i = 0;
00338     glGetRenderbufferParameterivEXT(GL_RENDERBUFFER_EXT, GL_RENDERBUFFER_DEPTH_SIZE_EXT, &i);
00339     glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,
00340                                  GL_RENDERBUFFER_EXT, depth_buffer);
00341 
00342 #endif
00343     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
00344     checkFramebufferStatus();
00345     QT_CHECK_GLERROR();
00346 }

Here is the call graph for this function:

bool QGLFramebufferObjectPrivate::checkFramebufferStatus (  )  const

Definition at line 252 of file qglframebufferobject.cpp.

References GL_FRAMEBUFFER_COMPLETE_EXT, GL_FRAMEBUFFER_EXT, GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT, GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT, GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT, GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT, GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT, GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT, GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT, GL_FRAMEBUFFER_UNSUPPORTED_EXT, glCheckFramebufferStatusEXT, GLenum, and qDebug().

Referenced by init().

00253 {
00254     GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
00255     switch(status) {
00256     case GL_NO_ERROR:
00257     case GL_FRAMEBUFFER_COMPLETE_EXT:
00258         return true;
00259         break;
00260     case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
00261         qDebug("QGLFramebufferObject: Unsupported framebuffer format.");
00262         break;
00263     case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
00264         qDebug("QGLFramebufferObject: Framebuffer incomplete attachment.");
00265         break;
00266     case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
00267         qDebug("QGLFramebufferObject: Framebuffer incomplete, missing attachment.");
00268         break;
00269 #ifdef GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT
00270     case GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT:
00271         qDebug("QGLFramebufferObject: Framebuffer incomplete, duplicate attachment.");
00272         break;
00273 #endif
00274     case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
00275         qDebug("QGLFramebufferObject: Framebuffer incomplete, attached images must have same dimensions.");
00276         break;
00277     case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
00278         qDebug("QGLFramebufferObject: Framebuffer incomplete, attached images must have same format.");
00279         break;
00280     case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
00281         qDebug("QGLFramebufferObject: Framebuffer incomplete, missing draw buffer.");
00282         break;
00283     case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
00284         qDebug("QGLFramebufferObject: Framebuffer incomplete, missing read buffer.");
00285         break;
00286     default:
00287         qDebug() <<"QGLFramebufferObject: An undefined error has occurred: "<< status;
00288         break;
00289     }
00290     return false;
00291 }

Here is the call graph for this function:


Member Data Documentation

GLuint QGLFramebufferObjectPrivate::texture

Definition at line 243 of file qglframebufferobject.cpp.

Referenced by init().

GLuint QGLFramebufferObjectPrivate::fbo

Definition at line 244 of file qglframebufferobject.cpp.

Referenced by init().

GLuint QGLFramebufferObjectPrivate::depth_buffer

Definition at line 245 of file qglframebufferobject.cpp.

Referenced by init().

GLenum QGLFramebufferObjectPrivate::target

Definition at line 246 of file qglframebufferobject.cpp.

Referenced by init().

QSize QGLFramebufferObjectPrivate::size

Definition at line 247 of file qglframebufferobject.cpp.

Referenced by init().

uint QGLFramebufferObjectPrivate::valid

Definition at line 248 of file qglframebufferobject.cpp.

Referenced by init().

QGLContext* QGLFramebufferObjectPrivate::ctx

Definition at line 249 of file qglframebufferobject.cpp.

Referenced by init().


The documentation for this class was generated from the following file:
Generated on Thu Mar 15 17:45:41 2007 for Qt 4.2 User's Guide by  doxygen 1.5.1