Sign in Join
Wiki copytemporary

BGRABitmap and OpenGL/fr: what changed

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

Title: BGRABitmap and OpenGL/fr

OldNewLine
1+[[BGRABitmap]] permet de dessiner avec [[OpenGL]] et donc de profiter de l'accélération matérielle.
2+
3+### Surface OpenGL
4+
5+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.
6+
7+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.
8+
9+#### TBGLVirtualScreen
10+
11+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.
12+
13+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:
14+
15+``` pascal
16+uses BGRABitmapTypes;
17+
18+procedure TForm1.BGLVirtualScreen1Redraw(Sender: TObject;
19+ BGLContext: TBGLContext);
20+begin
21+ BGLContext.Canvas.FillRect(10,10,100,100, CSSRed);
22+end;
23+```
24+
25+#### Avec juste TOpenGLControl
26+
27+Dans l'onglet OpenGL vous trouverez TOpenGLControl. Ajoutez-le à la fenêtre et définissez la propriété `AutoResizeViewPort` à **`true`**.
28+
29+Dans l'événement Paint :
30+
31+``` pascal
32+uses BGRAOpenGL, BGRABitmapTypes;
33+
34+procedure TForm1.OpenGLControl1Paint(Sender: TObject);
35+begin
36+ BGLViewPort(OpenGLControl1.Width, OpenGLControl1.Height, BGRAWhite);
37+
38+ // effectuer votre dessin ici
39+ BGLCanvas.FillRect(10, 10, 100, 100, CSSRed);
40+
41+ OpenGLControl1.SwapBuffers;
42+end;
43+```
44+
45+Vous obtiendrez :
46+
47+<figure>
48+<img src="bgrabitmap-openglcontrol-example1.png" title="bgrabitmap-openglcontrol-example1.png" />
49+<figcaption>bgrabitmap-openglcontrol-example1.png</figcaption>
50+</figure>
51+
52+#### Note sur Linux
53+
54+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:
55+
56+``` bash
57+ # installer la bibliothèque
58+ sudo apt-get install libgl-dev
59+ # dans certains cas, ajouter un lien vers la bibliothèque (pour processeurs 64bits)
60+ sudo ln -s /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/libGL.so
61+ sudo ln -s /usr/lib/x86_64-linux-gnu/libglib-2.0.so /usr/lib/libglib-2.0.so
62+ sudo ln -s /usr/lib/x86_64-linux-gnu/llibgthread-2.0.so /usr/lib/libgthread-2.0.so
63+ sudo ln -s /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so /usr/lib/libgmodule-2.0.so
64+ sudo ln -s /usr/lib/x86_64-linux-gnu/libgobject-2.0.so /usr/lib/libgobject-2.0.so
65+```
66+
67+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.
68+
69+### Textures
70+
71+[[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.
72+
73+Les textures correspondent à une variable IBGLTexture. Vous pouvez charger une texture directement depuis un fichier:
74+
75+``` pascal
76+var tex: IBGLTexture;
77+
78+tex := BGLTexture(path);
79+```
80+
81+Pour libérer la texture, faites simplement
82+
83+``` pascal
84+tex := nil;
85+```
86+
87+### Création de textures
88+
89+Au 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.
90+
91+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.
92+
93+``` pascal
94+var bmp: TBGLBitmap; tex: IBGLTexture;
95+
96+ bmp := TBGLBitmap.Create(path);
97+ bmp.Rectangle(0,0,bmp.Width,bmp.Height,CSSRed,dmSet);
98+ tex:=bmp.MakeTextureAndFree;
99+```
100+
101+### Exemples
102+
103+Vous trouverez des exemples dans le répertoire test/test4lcl_opengl[2](https://github.com/bgrabitmap/bgrabitmap/tree/master/test/test4lcl_opengl).
104+
105+#### Probability
106+
107+Il 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.
108+
109+<figure>
110+<img src="probability-screenshot.png" title="probability-screenshot.png" />
111+<figcaption>probability-screenshot.png</figcaption>
112+</figure>
113+
114+---
115+*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