
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 |
| QGLContext * | ctx |
| QGLFramebufferObjectPrivate::QGLFramebufferObjectPrivate | ( | ) | [inline] |
| QGLFramebufferObjectPrivate::~QGLFramebufferObjectPrivate | ( | ) | [inline] |
| 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:

1.5.1