Bonjour,

comme indiqué dans le titre, je ne parviens pas à activer le multisampling avec JOGL (2.0, version beta10 du 15/09/2009, trouvée ici). Le code ci-dessous, adapté d'un exemple trouvé sur la toile, affiche deux figures identiques, alors que celle de gauche devrait être lissée.

Par ailleurs, les versions plus récentes de JOGL (comme par exemple celle-ci) semblent incomplètes (absence des fichiers libnativewindow_jvm.so et libjogl_gl2.so) : j'ai sûrement dû manqué une étape.

Comme j'ai parcouru en vain des dizaines de pages en quête d'une réponse, je vous soumets mon problème, et toute aide ou suggestion sera donc la bienvenue.

Cordialement.

Note : je travaille avec Eclipse sous Ubuntu 9.10.

PS : le problème est le même avec un GLJPanel en lieu et place du GLCanvas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;
import javax.swing.JFrame;
 
public class Test extends JFrame implements GLEventListener {
 
	public static void main(String[] args) {
		new Test().run();
	}
 
	/*
	 * Affiche la JFrame
	 */
	public void run() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(600, 300);
		setLocationRelativeTo(null);
		setVisible(true);
	}
 
	/*
	 * La fenêtre contenant le GLCanvas
	 */
	public Test() {
		super("MultiSampling Test");
 
		GLCapabilities caps = new GLCapabilities(GLProfile.getDefault());
		caps.setSampleBuffers(true); 	// Active le multisampling
		caps.setNumSamples(8);			// Active le multisampling
		GLCanvas canvas = new GLCanvas(caps);
		canvas.addGLEventListener(this);
 
		add(canvas);
	}
 
	/*
	 * Initialise la figure à afficher
	 * 
	 */
	public void init(GLAutoDrawable drawable) {
		GL2 gl = drawable.getGL().getGL2();
 
		//
		int buf[] = new int[1];
		int sbuf[] = new int[1];
 
		gl.glClearColor(1f, 1f, 1f, 1f);
		gl.glGetIntegerv(GL.GL_SAMPLE_BUFFERS, buf, 0);
		System.out.println("number of sample buffers is " + buf[0]);
		gl.glGetIntegerv(GL.GL_SAMPLES, sbuf, 0);
		System.out.println("number of samples is " + sbuf[0]);
 
		gl.glNewList(1, GL2.GL_COMPILE);
		for (int i = 0; i < 19; i++) {
			gl.glColor3f(0f, 0f, 0f);
			gl.glPushMatrix();
			gl.glRotatef(360.0f * (float) i / 19.0f, 0.0f, 0.0f, 1.0f);
			gl.glBegin(GL.GL_LINES);
			gl.glVertex2f(0.25f, 0.05f);
			gl.glVertex2f(0.9f, 0.2f);
			gl.glEnd();
			gl.glPopMatrix();
		}
		gl.glEndList();
 
	}
 
	/*
	 * Affiche deux figures
	 * 
	 */
	public void display(GLAutoDrawable drawable) {
		GL2 gl = drawable.getGL().getGL2();
		gl.glClear(GL.GL_COLOR_BUFFER_BIT);
 
		gl.glEnable(GL.GL_MULTISAMPLE); // première figure lissé
		gl.glPushMatrix();
		gl.glTranslatef(-1.0f, 0.0f, 0.0f);
		gl.glCallList(1);
		gl.glPopMatrix();
 
		gl.glDisable(GL.GL_MULTISAMPLE); // seconde figure sans traitement
		gl.glPushMatrix();
		gl.glTranslatef(1.0f, 0.0f, 0.0f);
		gl.glCallList(1);
		gl.glPopMatrix();
 
		gl.glFlush();
	}
 
	/*
	 * Au cas où la fenêtre est redimensionnée
	 * 
	 */
	public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
		GL2 gl = drawable.getGL().getGL2();
		GLU glu = new GLU();
		//
		gl.glViewport(0, 0, w, h);
		gl.glMatrixMode(GL2.GL_PROJECTION);
		gl.glLoadIdentity();
		if (w <= (2 * h))
			glu.gluOrtho2D(-2.0, 2.0, //
					-2.0 * (float) h / (float) w, 2.0 * (float) h / (float) w);
		else
			glu.gluOrtho2D(-2.0 * (float) w / (float) h, //
					2.0 * (float) w / (float) h, -2.0, 2.0);
		gl.glMatrixMode(GL2.GL_MODELVIEW);
		gl.glLoadIdentity();
	}
 
	@Override
	public void dispose(GLAutoDrawable drawable) {
	}
}