Rendu GPU
Bien que Skija offre d'excellentes performances sur le CPU, sa véritable puissance est décuplée lors de l'utilisation de l'accélération GPU via OpenGL, Metal, Vulkan ou Direct3D.
Concepts
DirectContext
Le DirectContext représente la connexion au pilote GPU. Il gère les ressources GPU, les caches et l'état de l'API graphique sous-jacente.
BackendRenderTarget
Un BackendRenderTarget représente un tampon (comme un Framebuffer OpenGL ou une Texture Metal) dans lequel Skia peut dessiner.
Exemple : OpenGL avec LWJGL
Pour effectuer un rendu dans une fenêtre OpenGL en utilisant LWJGL :
- Initialiser OpenGL : Utilisez LWJGL pour créer une fenêtre et un contexte GL.
- Créer le DirectContext :java
DirectContext context = DirectContext.makeGL(); - Créer la Cible de Rendu : Vous devez indiquer à Skia dans quel framebuffer dessiner (généralement
0pour la fenêtre par défaut).javaBackendRenderTarget rt = BackendRenderTarget.makeGL( width, height, 0, /* échantillons */ 8, /* stencil */ fbId, /* identifiant du framebuffer GL */ FramebufferFormat.GR_GL_RGBA8 ); - Créer la Surface :java
Surface surface = Surface.makeFromBackendRenderTarget( context, rt, SurfaceOrigin.BOTTOM_LEFT, ColorType.RGBA_8888, ColorSpace.getSRGB() );
La Boucle de Rendu
Dans un environnement accéléré par GPU, vous devez manuellement signaler à Skia de soumettre les commandes au GPU.
java
while (!window.shouldClose()) {
Canvas canvas = surface.getCanvas();
// 1. Dessinez votre contenu
canvas.clear(0xFFFFFFFF);
canvas.drawCircle(50, 50, 30, paint);
// 2. Envoyez les commandes au GPU
context.flush();
// 3. Échangez les tampons (spécifique à l'API graphique)
window.swapBuffers();
}Bonnes Pratiques
- Réutilisez le Contexte : Créer un
DirectContextest coûteux. Créez-le une fois et utilisez-le pendant toute la durée de vie de votre application. - Gérez le Redimensionnement : Lorsque la fenêtre est redimensionnée, vous devez
close()l'ancienneSurfaceet leBackendRenderTarget, puis en créer de nouveaux correspondant aux nouvelles dimensions. - Gestion des Ressources : Les surfaces liées au GPU doivent être fermées lorsqu'elles ne sont plus nécessaires pour libérer la VRAM.