Remontage du topic ^^ On avait discuté plus haut de 2 solutions pour gérer le dessin d'une image dans un contexte graphique, à savoir:
Graphics g = new Graphics(...);
Image i = new Image(...);
g.drawImage(i);
Ou bien:
Graphics g = new Graphics(...);
Image i = new Image(...);
i.draw(g);
Cela pose toujours des problèmes puisque dans un cas dans l'autre, les objets doivent être intimement liés (l'image a besoin d'accéder au contexte graphique pour s'y dessiner, et le Graphics a besoin de propriétés spéciales qui doivent être cachées telles que le nom de texture pour dessiner l'image).
J'ai réfléchi à une autre solution, mais en java cette fois (qui est quand même bien plus pratique pour ça, notamment grâce aux packages):
package maLibrairieGraphique;
-- Image.java --
class Image {
Graphics linkedGfx;
Image(Graphics g, String filename) { linkedGfx = g; ... }
public void draw() { linkedGfx.gl.glBegin(...); ... }
}
-- Graphics.java --
class Graphics {
GLAutoDrawable gl;
public Graphics(GLAutoDrawable gl) { this.gl = gl; }
public void clearScreen() { gl.glClear(...); }
public Image createImage(String filename) { return new Image(this, filename); }
}
Ainsi on peut faire ceci:
Graphics g = new Graphics(...);
Image i = g.createImage("test.png");
g.clearScreen();
i.draw();
L'histoire du linkedGfx dans image est pour simuler une classe interne (-> Graphics.Image). Cela aurait été plus intuitif à l'implémentation, puisqu'une image est forcément issue d'une instance de Graphics et y est toujours lié, mais Java ne permet visiblement pas d'avoir des classes internes dans des fichiers .java séparés.
Je trouve ça moyennement convaincant, mais c'est assez logique, car en OpenGL en particulier l'image est liée à un contexte graphique (qui peut représenter une carte vidéo, incluant sa VRAM; et c'est le cas du GLAutoDrawable: si je fais glGenTextures ça ne va générer des textures valables que pour ce contexte).
J'aurais aimé avoir des retours sur cette solution
Merci d'avance!