Difference between revisions of "BGRABitmap and OpenGL/fr"
m (Fixed syntax highlighting) |
|||
(7 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
{{BGRABitmap and OpenGL}} | {{BGRABitmap and OpenGL}} | ||
− | BGRABitmap permet de dessiner avec OpenGL et donc de profiter de l'accélération matérielle. | + | [[BGRABitmap]] permet de dessiner avec [[OpenGL]] et donc de profiter de l'accélération matérielle. |
=== Surface OpenGL === | === Surface OpenGL === | ||
Line 11: | Line 11: | ||
==== TBGLVirtualScreen ==== | ==== TBGLVirtualScreen ==== | ||
− | Le paquet BGLControls dans l'archive de BGRABitmap contient un composant TBGLVirtualScreen qui fournit une surface OpenGL plus facile à utiliser. Il est recommandé d'installer ce paquet en plus. | + | Le paquet BGLControls dans l'archive de [[BGRABitmap]] contient un composant TBGLVirtualScreen qui fournit une surface OpenGL plus facile à utiliser. Il est recommandé d'installer ce paquet en plus. |
Il apparait dans la barre d'outil des composants dans l'onglet OpenGL. Il ne reste qu'à le poser sur la fenêtre et de redéfinir l'événement Redraw. Par exemple pour dessiner un rectangle rouge: | Il apparait dans la barre d'outil des composants dans l'onglet OpenGL. Il ne reste qu'à le poser sur la fenêtre et de redéfinir l'événement Redraw. Par exemple pour dessiner un rectangle rouge: | ||
− | <syntaxhighlight>uses BGRABitmapTypes; | + | <syntaxhighlight lang="pascal">uses BGRABitmapTypes; |
procedure TForm1.BGLVirtualScreen1Redraw(Sender: TObject; | procedure TForm1.BGLVirtualScreen1Redraw(Sender: TObject; | ||
Line 23: | Line 23: | ||
end;</syntaxhighlight> | end;</syntaxhighlight> | ||
− | ==== | + | ==== Avec juste TOpenGLControl ==== |
− | + | Dans l'onglet OpenGL vous trouverez TOpenGLControl. Ajoutez-le à la fenêtre et définissez la propriété <tt>AutoResizeViewPort</tt> à <tt>'''true'''</tt>. | |
− | < | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Dans l'événement Paint: | + | Dans l'événement Paint : |
− | <syntaxhighlight>procedure TForm1. | + | <syntaxhighlight lang="pascal">uses BGRAOpenGL, BGRABitmapTypes; |
− | + | ||
− | + | procedure TForm1.OpenGLControl1Paint(Sender: TObject); | |
begin | begin | ||
− | BGLViewPort( | + | BGLViewPort(OpenGLControl1.Width, OpenGLControl1.Height, BGRAWhite); |
+ | |||
+ | // effectuer votre dessin ici | ||
+ | BGLCanvas.FillRect(10, 10, 100, 100, CSSRed); | ||
+ | |||
+ | OpenGLControl1.SwapBuffers; | ||
+ | end; | ||
+ | </syntaxhighlight> | ||
− | + | Vous obtiendrez : | |
− | |||
− | + | [[File:bgrabitmap-openglcontrol-example1.png]] | |
− | |||
==== Note sur Linux ==== | ==== Note sur Linux ==== | ||
− | Sous Linux, il se peut que la bibliothèque OpenGL soit manquante ce qui empêche l'étape finale de compilation des liens. Pour résoudre le problème, effectuez: | + | Sous Linux, il se peut que la bibliothèque [[OpenGL]] soit manquante ce qui empêche l'étape finale de compilation des liens. Pour résoudre le problème, effectuez: |
− | #installer la | + | <syntaxhighlight lang="bash"> |
+ | # installer la bibliothèque | ||
sudo apt-get install libgl-dev | sudo apt-get install libgl-dev | ||
− | # | + | # dans certains cas, ajouter un lien vers la bibliothèque (pour processeurs 64bits) |
sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so | sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so | ||
+ | sudo ln -s /usr/lib/x86_64-linux-gnu/libglib-2.0.so /usr/lib/libglib-2.0.so | ||
+ | sudo ln -s /usr/lib/x86_64-linux-gnu/llibgthread-2.0.so /usr/lib/libgthread-2.0.so | ||
+ | sudo ln -s /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so /usr/lib/libgmodule-2.0.so | ||
+ | sudo ln -s /usr/lib/x86_64-linux-gnu/libgobject-2.0.so /usr/lib/libgobject-2.0.so | ||
+ | </syntaxhighlight> | ||
Lors de la recompilation et du redémarrage de Lazarus, il se peut que le programme reste bloqué au slashscreen. Dans ce cas, terminez le processus avec le moniteur système. | Lors de la recompilation et du redémarrage de Lazarus, il se peut que le programme reste bloqué au slashscreen. Dans ce cas, terminez le processus avec le moniteur système. | ||
Line 60: | Line 63: | ||
=== Textures === | === Textures === | ||
− | OpenGL utilise sa prore mémoire pour stocker les images. De plus il est nécessaire d'être dans le bon contexte OpenGL. Pour cela, chargez les images dans l'évenement OnPaint ou bien utilisez les événements LoadTextures et UnloadTextures de TBGLVirtualScreen. Vous pouvez également utiliser la fonction UseContext. | + | [[OpenGL]] utilise sa prore mémoire pour stocker les images. De plus il est nécessaire d'être dans le bon contexte OpenGL. Pour cela, chargez les images dans l'évenement OnPaint ou bien utilisez les événements LoadTextures et UnloadTextures de TBGLVirtualScreen. Vous pouvez également utiliser la fonction UseContext. |
Les textures correspondent à une variable IBGLTexture. Vous pouvez charger une texture directement depuis un fichier: | Les textures correspondent à une variable IBGLTexture. Vous pouvez charger une texture directement depuis un fichier: | ||
− | <syntaxhighlight>var tex: IBGLTexture; | + | <syntaxhighlight lang="pascal">var tex: IBGLTexture; |
tex := BGLTexture(path);</syntaxhighlight> | tex := BGLTexture(path);</syntaxhighlight> | ||
Pour libérer la texture, faites simplement | Pour libérer la texture, faites simplement | ||
− | <syntaxhighlight>tex := nil;</syntaxhighlight> | + | <syntaxhighlight lang="pascal">tex := nil;</syntaxhighlight> |
=== Création de textures === | === Création de textures === | ||
− | Au lieu d'utiliser la classe TBGRABitmap, utilisez la classe TBGLBitmap de l'unité BGRAOpenGL. Elle est semblable en tout point à TBGRABitmap, sauf qu'elle a une propriété Texture qui peut être utilisée avec les fonctions OpenGL. | + | Au lieu d'utiliser la classe TBGRABitmap, utilisez la classe TBGLBitmap de l'unité BGRAOpenGL[https://github.com/bgrabitmap/bgrabitmap/blob/master/bgrabitmap/bgraopengl.pas]. Elle est semblable en tout point à TBGRABitmap, sauf qu'elle a une propriété Texture qui peut être utilisée avec les fonctions OpenGL. |
Enfin si vous avez fini le tracé de la texture et que vous n'allez plus la modifier, vous pouvez libérer l'objet TBGLBitmap et récupérer la texture avec la fonction MakeTextureAndFree. | Enfin si vous avez fini le tracé de la texture et que vous n'allez plus la modifier, vous pouvez libérer l'objet TBGLBitmap et récupérer la texture avec la fonction MakeTextureAndFree. | ||
− | <syntaxhighlight>var bmp: TBGLBitmap; tex: IBGLTexture; | + | <syntaxhighlight lang="pascal">var bmp: TBGLBitmap; tex: IBGLTexture; |
bmp := TBGLBitmap.Create(path); | bmp := TBGLBitmap.Create(path); | ||
Line 85: | Line 88: | ||
Vous trouverez des exemples dans le répertoire test/test4lcl_opengl[https://github.com/bgrabitmap/bgrabitmap/tree/master/test/test4lcl_opengl]. | Vous trouverez des exemples dans le répertoire test/test4lcl_opengl[https://github.com/bgrabitmap/bgrabitmap/tree/master/test/test4lcl_opengl]. | ||
+ | |||
+ | ==== Probability ==== | ||
Il y a aussi une démo appelée probability[https://github.com/bgrabitmap/bgracontest/tree/master/2015/probability] dans le dépôt de BGRAContext 2015. | Il y a aussi une démo appelée probability[https://github.com/bgrabitmap/bgracontest/tree/master/2015/probability] dans le dépôt de BGRAContext 2015. | ||
+ | |||
+ | [[File:probability-screenshot.png]] |
Latest revision as of 10:17, 9 February 2020
│
English (en) │
français (fr) │
BGRABitmap permet de dessiner avec OpenGL et donc de profiter de l'accélération matérielle.
Surface OpenGL
Vous aurez besoin aussi d'une surface OpenGL. Le paquet LazOpenGLContext dans le répertoire components\opengl de lazarus fournit une telle surface. Il est nécessaire d'ajouter un peu de code pour le gérer correctement. Alors le composant TBGLVirtualScreen est là pour vous faciliter la vie. Cependant il repose sur le paquet LazOpenGLContext que vous devrez donc installer de toutes façons.
L'installation du paquet sur Linux peut poser problème. Voir la note sur Linux plus bas avant de procéder à l'installation des paquets.
TBGLVirtualScreen
Le paquet BGLControls dans l'archive de BGRABitmap contient un composant TBGLVirtualScreen qui fournit une surface OpenGL plus facile à utiliser. Il est recommandé d'installer ce paquet en plus.
Il apparait dans la barre d'outil des composants dans l'onglet OpenGL. Il ne reste qu'à le poser sur la fenêtre et de redéfinir l'événement Redraw. Par exemple pour dessiner un rectangle rouge:
uses BGRABitmapTypes;
procedure TForm1.BGLVirtualScreen1Redraw(Sender: TObject;
BGLContext: TBGLContext);
begin
BGLContext.Canvas.FillRect(10,10,100,100, CSSRed);
end;
Avec juste TOpenGLControl
Dans l'onglet OpenGL vous trouverez TOpenGLControl. Ajoutez-le à la fenêtre et définissez la propriété AutoResizeViewPort à true.
Dans l'événement Paint :
uses BGRAOpenGL, BGRABitmapTypes;
procedure TForm1.OpenGLControl1Paint(Sender: TObject);
begin
BGLViewPort(OpenGLControl1.Width, OpenGLControl1.Height, BGRAWhite);
// effectuer votre dessin ici
BGLCanvas.FillRect(10, 10, 100, 100, CSSRed);
OpenGLControl1.SwapBuffers;
end;
Vous obtiendrez :
Note sur Linux
Sous Linux, il se peut que la bibliothèque OpenGL soit manquante ce qui empêche l'étape finale de compilation des liens. Pour résoudre le problème, effectuez:
# installer la bibliothèque
sudo apt-get install libgl-dev
# dans certains cas, ajouter un lien vers la bibliothèque (pour processeurs 64bits)
sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libglib-2.0.so /usr/lib/libglib-2.0.so
sudo ln -s /usr/lib/x86_64-linux-gnu/llibgthread-2.0.so /usr/lib/libgthread-2.0.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so /usr/lib/libgmodule-2.0.so
sudo ln -s /usr/lib/x86_64-linux-gnu/libgobject-2.0.so /usr/lib/libgobject-2.0.so
Lors de la recompilation et du redémarrage de Lazarus, il se peut que le programme reste bloqué au slashscreen. Dans ce cas, terminez le processus avec le moniteur système.
Textures
OpenGL utilise sa prore mémoire pour stocker les images. De plus il est nécessaire d'être dans le bon contexte OpenGL. Pour cela, chargez les images dans l'évenement OnPaint ou bien utilisez les événements LoadTextures et UnloadTextures de TBGLVirtualScreen. Vous pouvez également utiliser la fonction UseContext.
Les textures correspondent à une variable IBGLTexture. Vous pouvez charger une texture directement depuis un fichier:
var tex: IBGLTexture;
tex := BGLTexture(path);
Pour libérer la texture, faites simplement
tex := nil;
Création de textures
Au lieu d'utiliser la classe TBGRABitmap, utilisez la classe TBGLBitmap de l'unité BGRAOpenGL[1]. Elle est semblable en tout point à TBGRABitmap, sauf qu'elle a une propriété Texture qui peut être utilisée avec les fonctions OpenGL.
Enfin si vous avez fini le tracé de la texture et que vous n'allez plus la modifier, vous pouvez libérer l'objet TBGLBitmap et récupérer la texture avec la fonction MakeTextureAndFree.
var bmp: TBGLBitmap; tex: IBGLTexture;
bmp := TBGLBitmap.Create(path);
bmp.Rectangle(0,0,bmp.Width,bmp.Height,CSSRed,dmSet);
tex:=bmp.MakeTextureAndFree;
Exemples
Vous trouverez des exemples dans le répertoire test/test4lcl_opengl[2].
Probability
Il y a aussi une démo appelée probability[3] dans le dépôt de BGRAContext 2015.