Sign in Join
Wiki copytemporary

BGRABitmap and OpenGL/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11[[BGRABitmap]] permet de dessiner avec [[OpenGL]] et donc de profiter de l'accélération matérielle.
22
33### Surface OpenGL
44
55Vous 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.
66
77L'installation du paquet sur Linux peut poser problème. Voir la note sur Linux plus bas avant de procéder à l'installation des paquets.
88
99#### TBGLVirtualScreen
1010
1111Le 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.
1212
1313Il 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:
1414
1515``` pascal
1616uses BGRABitmapTypes;
1717
1818procedure TForm1.BGLVirtualScreen1Redraw(Sender: TObject;
1919 BGLContext: TBGLContext);
2020begin
2121 BGLContext.Canvas.FillRect(10,10,100,100, CSSRed);
2222end;
2323```
2424
2525#### Avec juste TOpenGLControl
2626
2727Dans l'onglet OpenGL vous trouverez TOpenGLControl. Ajoutez-le à la fenêtre et définissez la propriété `AutoResizeViewPort` à **`true`**.
2828
2929Dans l'événement Paint :
3030
3131``` pascal
3232uses BGRAOpenGL, BGRABitmapTypes;
3333
3434procedure TForm1.OpenGLControl1Paint(Sender: TObject);
3535begin
3636 BGLViewPort(OpenGLControl1.Width, OpenGLControl1.Height, BGRAWhite);
3737
3838 // effectuer votre dessin ici
3939 BGLCanvas.FillRect(10, 10, 100, 100, CSSRed);
4040
4141 OpenGLControl1.SwapBuffers;
4242end;
4343```
4444
4545Vous obtiendrez :
4646
47-<figure>
48-<img src="bgrabitmap-openglcontrol-example1.png" title="bgrabitmap-openglcontrol-example1.png" />
49-<figcaption>bgrabitmap-openglcontrol-example1.png</figcaption>
50-</figure>
47+![](/wiki-images/4/41/Bgrabitmap-openglcontrol-example1.png)
5148
5249#### Note sur Linux
5350
5451Sous 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:
5552
5653``` bash
5754 # installer la bibliothèque
5855 sudo apt-get install libgl-dev
5956 # dans certains cas, ajouter un lien vers la bibliothèque (pour processeurs 64bits)
6057 sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so
6158 sudo ln -s /usr/lib/x86_64-linux-gnu/libglib-2.0.so /usr/lib/libglib-2.0.so
6259 sudo ln -s /usr/lib/x86_64-linux-gnu/llibgthread-2.0.so /usr/lib/libgthread-2.0.so
6360 sudo ln -s /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so /usr/lib/libgmodule-2.0.so
6461 sudo ln -s /usr/lib/x86_64-linux-gnu/libgobject-2.0.so /usr/lib/libgobject-2.0.so
6562```
6663
6764Lors 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.
6865
6966### Textures
7067
7168[[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.
7269
7370Les textures correspondent à une variable IBGLTexture. Vous pouvez charger une texture directement depuis un fichier:
7471
7572``` pascal
7673var tex: IBGLTexture;
7774
7875tex := BGLTexture(path);
7976```
8077
8178Pour libérer la texture, faites simplement
8279
8380``` pascal
8481tex := nil;
8582```
8683
8784### Création de textures
8885
8986Au lieu d'utiliser la classe TBGRABitmap, utilisez la classe TBGLBitmap de l'unité BGRAOpenGL[1](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.
9087
9188Enfin 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.
9289
9390``` pascal
9491var bmp: TBGLBitmap; tex: IBGLTexture;
9592
9693 bmp := TBGLBitmap.Create(path);
9794 bmp.Rectangle(0,0,bmp.Width,bmp.Height,CSSRed,dmSet);
9895 tex:=bmp.MakeTextureAndFree;
9996```
10097
10198### Exemples
10299
103100Vous trouverez des exemples dans le répertoire test/test4lcl_opengl[2](https://github.com/bgrabitmap/bgrabitmap/tree/master/test/test4lcl_opengl).
104101
105102#### Probability
106103
107104Il y a aussi une démo appelée probability[3](https://github.com/bgrabitmap/bgracontest/tree/master/2015/probability) dans le dépôt de BGRAContext 2015.
108105
109-<figure>
110-<img src="probability-screenshot.png" title="probability-screenshot.png" />
111-<figcaption>probability-screenshot.png</figcaption>
112-</figure>
106+![](/wiki-images/6/6d/Probability-screenshot.png)
113107
114108---
115109*From the Free Pascal wiki, page "BGRABitmap and OpenGL/fr", as it stood on 2020-02-09 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history