Viadeo Twitter Google Bookmarks ! Facebook Digg del.icio.us MySpace Yahoo MyWeb Blinklist Netvouz Reddit Simpy StumbleUpon Bookmarks Windows Live Favorites 
Logo Documentation Qt ·  Page d'accueil  ·  Toutes les classes  ·  Toutes les fonctions  ·  Vues d'ensemble  · 

QGLFramebufferObject

La classe QGLFramebufferObject implémente un objet framebuffer OpenGL. Plus d'informations...

#include <QGLFramebufferObject>

Voir la position dans l'arbre des classes.

  

Héritage

Hérite de QPaintDevice.

Cette classe a été introduite dans Qt 4.2.

Description détaillée

La classe QGLFramebufferObject implémente un objet framebuffer OpenGL

La classe QGLFramebufferObject implémente un objet framebuffer OpenGL, définie par l'extension GL_EXT_framebuffer_object. De plus, la classe fournit une surface de rendu qui peut être peinte avec un QPainter, ou avec des appels OpenGL natifs, ou les deux. Cette surface peut être liée et utilisée comme une texture dans votre propre code OpenGL de dessin. Par défaut, la classe QGLFramebufferObject génère une texture 2D OpenGL (en utilisant la cible GL_TEXTURE_2D), qui est utilisée comme cible de rendu interne.

Il est important d'avoir un contexte OpenGL courant lors de la création d'un QGLFramebufferObject, sinon l'initialisation échouera.

Les objets framebuffer OpenGL et les pbuffers (voir QGLPixelBuffer) peuvent être tous les deux utilisés pour faire des rendus hors écran, mais il y a quelques avantages à utiliser les objets framebuffer à la place des pbuffers.

  1. Un objet framebuffer ne nécessite pas un contexte de rendu séparé, donc aucun changement de contexte n'est fait lors du changement de cible de rendu. Il y a une certaine perte dans le changement des cibles mais c'est généralement moins coûteux qu'un changement de contexte pour un pbuffer.
  2. Le dessin de textures dynamiques (c'est-à-dire, la fonctionnalité de dessin sur texture) fonctionne sur toutes les plateformes. Il n'y a pas besoin d'appels explicites à des fonctions de copie pour copier le buffer de rendu dans une texture comme c'était le cas sur les systèmes ne prenant pas en charge l'extension render_texture.
  3. Il est possible d'attacher plusieurs buffers de rendu (ou objets textures) au même objet framebuffer et de dessiner sur tous sans changement de contexte.
  4. L'extension des framebuffer OpenGL est une extension purement OpenGL qui est indépendante des parties WGL, CGL ou GLX. Cela rend les objets framebuffer encore plus portables.

Lors de l'utilisation d'un QPainter pour dessiner sur un QGLFramebufferObject, il faut faire attention à ce que le QGLFramebufferObject soit créé avec l'indicateur CombinedDepthStencil pour que QPainter soit capable de dessiner correctement. À noter que l'on doit créer un QGLFramebufferObject avec plus d'un échantillon par pixel pour avoir des primitives anti-aliasées lors de l'utilisation d'un QPainter. Pour créer un objet framebuffer ayant du multisampling on doit utiliser un des constructeurs qui prennent un paramètre QGLFramebufferObject, et définir la propriété QGLFramebufferObject::samples() à une valeur différente de 0.

Lors du dessin sur un QGLFramebufferObject en utilisant un QPainter, l'état du contexte OpenGL courant va être modifié par le moteur de rendu pour ses propres besoins. Les applications ne devraient pas se reposer sur le fait que les états d'OpenGL seront réinitialisés aux statuts précédents, particulièrement pour le programme shader courant, la vue OpenGL, les unités de texture et les modes de dessin.

Pour les objets framebuffer avec multisampling, un buffer de rendu de couleurs est créé, sinon une texture avec la cible de texture spécifiée est créée. Le buffer de rendu de couleurs ou la texture vont avoir le format interne spécifié et vont être liés à GL_COLOR_ATTACHMENT0 dans l'objet framebuffer.

Si on veut utiliser un objet framebuffer avec le multisampling activé en tant que texture, il faut d'abord copier celui-ci dans un objet framebuffer ordinaire en utilisant QGLContext::blitFramebuffer().

Voir aussi l'exemple objet framebuffer.

Type

enum QGLFramebufferObject::Attachment

Cette enum est utilisée pour configurer la profondeur et le stencil buffer attaché à l'objet framebuffer lors de sa création.

Constante Valeur Description
QGLFramebufferObject::NoAttachment   Aucun attachement n'est ajouté à l'objet framebuffer. À noter que les tests de profondeur et de stencil qu'OpenGL effectue lors du rendu ne vont pas fonctionner sur un objet frambuffer sans buffer de profondeur ou de stencil. C'est la valeur par défaut.
QGLFramebufferObject::CombinedDepthStencil 1 Si l'extension GL_EXT_packed_depth_stencil est présente, un buffer combiné de profondeur et de stencil est joint. Si l'extension n'est pas présente, seulement un buffer de profondeur est joint.
QGLFramebufferObject::Depth 2 Un buffer de profondeur est joint à l'objet framebuffer.

Cette enum a été introduite ou modifiée dans Qt 4.3.

Voir aussi attachment().

Fonctions membres

QGLFramebufferObject::QGLFramebufferObject ( const QSize & size, GLenum target = GL_TEXTURE_2D )

Construit un objet framebuffer OpenGL et lie une texture 2D OpenGL au buffer ayant pour taille size. La texture est liée à la cible GL_COLOR_ATTACHMENT0 dans l'objet framebuffer.

Le paramètre cible target est utilisé pour spécifier la texture OpenGL cible. La cible par défaut est GL_TEXTURE_2D. On gardera à l'esprit que les textures GL_TEXTURE_2D doivent avoir une taille en puissance de 2 pour la largeur et la hauteur (par exemple, 256 × 512), si on n'utilise pas OpenGL 2.0 ou supérieur.

Par défaut, aucun buffer de profondeur ni de stencil n'est attaché. Ce comportement peut être modifié en utilisant un des constructeurs surchargé.

Le format interne de texture par défaut est GL_RGBA8 pour OpenGL pour bureau et GL_RGBA pour OpenGL/ES.

Il est important d'avoir un contexte OpenGL courant lors de la création du QGLFramebufferObject, sinon l'initialisation échouera.

Voir aussi size(), texture() et attachment().

QGLFramebufferObject::QGLFramebufferObject ( int width, int height, GLenum target = GL_TEXTURE_2D )

Il s'agit d'une fonction surchargée.

Construit un objet framebuffer OpenGL et lie une texture 2D OpenGL au buffer avec la largeur width et la hauteur height données.

Voir aussi size() et texture().

QGLFramebufferObject::QGLFramebufferObject ( const QSize & size, const QGLFramebufferObjectFormat & format )

Il s'agit d'une fonction surchargée.

Construit un objet framebuffer OpenGL de la taille size donnée basé sur le format.

QGLFramebufferObject::QGLFramebufferObject ( int width, int height, const QGLFramebufferObjectFormat & format )

Il s'agit d'une fonction surchargée.

Construit un objet framebuffer OpenGL de la largeur width et la hauteur height données basé sur le format.

QGLFramebufferObject::QGLFramebufferObject ( int width, int height, Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internal_format = GL_RGBA8 )

Il s'agit d'une fonction surchargée.

Construit un objet framebuffer OpenGL et lie une texture au buffer de la largeur width et hauteur height données.

Le paramètre attachment décrit la configuration du buffer de profondeur/stencil, target la cible de texture et internal_format le format interne de la texture. La cible de texture par défaut est GL_TEXTURE_2D, alors que le format interne par défaut est GL_RGBA8 pour OpenGL pour bureau et GL_RGBA pour OpenGL/ES.

Voir aussi size(), texture() et attachment().

QGLFramebufferObject::QGLFramebufferObject ( const QSize & size, Attachment attachment, GLenum target = GL_TEXTURE_2D, GLenum internal_format = GL_RGBA8 )

Il s'agit d'une fonction surchargée.

Construit un objet framebuffer OpenGL et lie une texture au buffer de la taille size donnée.

Le paramètre attachment décrit la configuration du buffer de profondeur/stencil, target la cible de texture et internal_format le format internet de la texture. La cible de texture par défaut est GL_TEXTURE_2D, alors que le format interne par défaut est GL_RGBA8 pour OpenGL pour bureau et GL_RGBA pour OpenGL/ES.

Voir aussi size(), texture() et attachment().

QGLFramebufferObject::~QGLFramebufferObject () [virtual]

Détruit l'objet framebuffer et libère les ressources allouées.

Attachment QGLFramebufferObject::attachment () const

Retourne le statut du buffer de profondeur et du stencil buffer attachés à cet objet framebuffer.

bool QGLFramebufferObject::bind ()

Définit le rendu, effectué par défaut sur le framebuffer du système de fenêtre, à cet objet framebuffer. Retourne true si le changement est réussi, sinon false.

Voir aussi release().

void QGLFramebufferObject::blitFramebuffer ( QGLFramebufferObject * target, const QRect & targetRect, QGLFramebufferObject * source, const QRect & sourceRect, GLbitfield buffers = GL_COLOR_BUFFER_BIT, GLenum filter = GL_NEAREST ) [static]

Copie le rectangle sourceRect de l'objet framebuffer source dans le rectangle targetRect dans l'objet framebuffer target cible.

Si source ou target est 0, le framebuffer par défaut est utilisé à la place d'un objet framebuffer source ou cible, respectivement.

Le paramètre buffers doit être un masque consistant en une combinaison de GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT et GL_STENCIL_BUFFER_BIT. Si l'un des types de buffer n'est pas présent dans la source ou la cible, il est ignoré.

Les rectangles sourceRect et targetRect peuvent avoir des tailles différentes ; dans ce cas buffers ne devrait pas contenir GL_DEPTH_BUFFER_BIT ou GL_STENCIL_BUFFER_BIT. Le paramètre filtre filter doit être défini à GL_LINEAR ou GL_NEAREST, et spécifie si l'interpolation est linéaire ou au plus proche lors du redimensionnement.

Si la source est égale à la cible target une copie est effectuée dans le même buffer. Les résultats sont non définis si les rectangles source et cible se recouvrent et ont une taille différente. Les tailles doivent être les mêmes si l'un des objets framebuffer est un buffer utilisant le multisampling.

À noter que le scissor test va restreindre les zones de dessin s'il est activé.

Cette fonction ne va avoir aucun effet si hasOpenGLFramebufferBlit() retourne false.

Cette fonction a été introduite dans Qt 4.6.

Voir aussi hasOpenGLFramebufferBlit().

void QGLFramebufferObject::drawTexture ( const QRectF & target, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D )

Dessine la texture donnée, textureId, dans le rectangle cible, target, dans l'espace de coordonnées du modèle OpenGL. Le paramètre textureTarget doit être une cible de texture 2D.

L'objet framebuffer doit être lié lors de l'appel à cette fonction.

Équivalent à la fonction correspondante QGLContext::drawTexture().

Cette fonction a été introduite dans Qt 4.4.

void QGLFramebufferObject::drawTexture ( const QPointF & point, GLuint textureId, GLenum textureTarget = GL_TEXTURE_2D )

Dessine la texture donnée, textureId, au point donné dans l'espace de coordonnées du modèle OpenGL. Le paramètre textureTarget doit être une cible de texture 2D.

L'objet framebuffer doit être lié lors de l'appel à cette fonction.

Équivalent à la fonction correspondante QGLContext::drawTexture().

Cette fonction a été introduite dans Qt 4.4.

QGLFramebufferObjectFormat QGLFramebufferObject::format () const

Retourne le format de cet objet framebuffer.

GLuint QGLFramebufferObject::handle () const

Retourne l'identifiant OpenGL de cet objet framebuffer (retourné par la fonction glGenFrameBuffersEXT()). Cet identifiant peut être utilisé pour attacher de nouvelles images ou buffers au framebuffer. L'utilisateur est responsable de la destruction de ces objets.

bool QGLFramebufferObject::hasOpenGLFramebufferBlit () [static]

Retourne true si l'extension OpenGL GL_EXT_framebuffer_blit est présente sur ce système ; sinon retourne false.

Cette fonction a été introduite dans Qt 4.6.

Voir aussi blitFramebuffer().

bool QGLFramebufferObject::hasOpenGLFramebufferObjects () [static]

Retourne true si l'extension OpenGL GL_EXT_framebuffer_object est présente sur ce système ; sinon retourne false.

bool QGLFramebufferObject::isBound () const

Retourne true si l'objet framebuffer est actuellement lié à un contexte ; sinon retourne false.

Cette fonction a été introduite dans Qt 4.5.

bool QGLFramebufferObject::isValid () const

Retourne true si l'objet framebuffer est valide.

Le framebuffer peut devenir invalide si le processus d'initialisation échoue, si l'utilisateur attache un buffer invalide à l'objet framebuffer, ou si une taille non puissance de 2 pour la largeur/hauteur est spécifiée comme taille de texture lorsque la texture cible est GL_TEXTURE_2D. La limitation sur la puissance de 2 ne s'applique pas si la version d'OpenGL est supérieure ou égale à 2.0 ou si l'extension GL_ARB_texture_non_power_of_two est présente.

Le framebuffer peut aussi devenir invalide si le QGLContext dans lequel le framebuffer a été créé est détruit, et qu'il n'y a pas d'autre contexte partagé qui peut prendre possession du framebuffer.

int QGLFramebufferObject::metric ( PaintDeviceMetric metric ) const [virtual protected]

Réimplémentation de QPaintDevice::metric().

QPaintEngine * QGLFramebufferObject::paintEngine () const [virtual]

Réimplémentation de QPaintDevice::paintEngine().

bool QGLFramebufferObject::release ()

Redéfinit le rendu à sa valeur par défaut, soit le framebuffer fourni par le système de fenêtres. Retourne true si la fonction réussit, sinon false.

Voir aussi bind().

QSize QGLFramebufferObject::size () const

Retourne la taille de la texture attachée à cet objet framebuffer.

GLuint QGLFramebufferObject::texture () const

Retourne l'identifiant de la texture attachée comme cible de rendu par défaut dans cet objet framebuffer. Cet identifiant de texture peut être lié comme une texture normale dans le code OpenGL.

Si un objet framebuffer avec du multisampling est utilisé alors la valeur retournée par cette fonction est invalide.

QImage QGLFramebufferObject::toImage () const

Retourne le contenu de cet objet framebuffer comme une QImage.

Remerciements

Merci à Alexandre Laurent pour la traduction ainsi qu'à Lo?c Leguay, Jonathan Courtois et Claude Leloup pour leur relecture !

Publicité

Best Of

Actualités les plus lues

Semaine
Mois
Année
  1. Microsoft ouvre aux autres compilateurs C++ AMP, la spécification pour la conception d'applications parallèles C++ utilisant le GPU 22
  2. Les développeurs ignorent-ils trop les failles découvertes dans leur code ? Prenez-vous en compte les remarques des autres ? 17
  3. RIM : « 13 % des développeurs ont gagné plus de 100 000 $ sur l'AppWord », Qt et open-source au menu du BlackBerry DevCon Europe 0
  4. « Quelque chose ne va vraiment pas avec les développeurs "modernes" », un développeur à "l'ancienne" critique la multiplication des bibliothèques 12
  5. BlackBerry 10 : premières images du prochain OS de RIM qui devrait intégrer des widgets et des tuiles inspirées de Windows Phone 0
  6. Adieu qmake, bienvenue qbs : Qt Building Suite, un outil déclaratif et extensible pour la compilation de projets Qt 17
  7. Quelles nouveautés de C++11 Visual C++ doit-il rapidement intégrer ? Donnez-nous votre avis 10
Page suivante

Le Qt Developer Network au hasard

Logo

Compiler l'add-in Qt de Visual Studio

Le Qt Developer Network est un réseau de développeurs Qt anglophone, où ils peuvent partager leur expérience sur le framework. Lire l'article.

Communauté

Ressources

Liens utiles

Contact

  • Vous souhaitez rejoindre la rédaction ou proposer un tutoriel, une traduction, une question... ? Postez dans le forum Contribuez ou contactez-nous par MP ou par email (voir en bas de page).

Qt dans le magazine

Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. Qt 4.7
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD.
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP !
 
 
 
 
Partenaires

Hébergement Web