Skip to content

Commit 95f307a

Browse files
committed
fixes?
1 parent 1059c81 commit 95f307a

4 files changed

Lines changed: 389 additions & 70 deletions

File tree

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
/*
2+
* Copyright (c) 2009-2026 jMonkeyEngine
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are
7+
* met:
8+
*
9+
* * Redistributions of source code must retain the above copyright
10+
* notice, this list of conditions and the following disclaimer.
11+
*
12+
* * Redistributions in binary form must reproduce the above copyright
13+
* notice, this list of conditions and the following disclaimer in the
14+
* documentation and/or other materials provided with the distribution.
15+
*
16+
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
17+
* may be used to endorse or promote products derived from this software
18+
* without specific prior written permission.
19+
*
20+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22+
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24+
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25+
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26+
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27+
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28+
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29+
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31+
*/
32+
package jme3test.debug;
33+
34+
import com.jme3.app.SimpleApplication;
35+
import com.jme3.material.Material;
36+
import com.jme3.math.ColorRGBA;
37+
import com.jme3.scene.Geometry;
38+
import com.jme3.scene.shape.Box;
39+
import com.jme3.system.AppSettings;
40+
41+
/**
42+
* Minimal window/render smoke test for backend debugging.
43+
*/
44+
public class WindowSmokeTest extends SimpleApplication {
45+
46+
private Geometry cube;
47+
48+
public static void main(String[] args) {
49+
AppSettings settings = new AppSettings(true);
50+
settings.setTitle("jME3 Window Smoke Test");
51+
settings.setResolution(640, 360);
52+
settings.setWindowSize(640, 360);
53+
settings.setRenderer(System.getProperty("jme.renderer", AppSettings.LWJGL_OPENGL33));
54+
settings.setGammaCorrection(Boolean.parseBoolean(System.getProperty("jme.gamma", "true")));
55+
settings.setX11PlatformPreferred(Boolean.parseBoolean(System.getProperty("jme.x11", "false")));
56+
settings.setVSync(false);
57+
58+
WindowSmokeTest app = new WindowSmokeTest();
59+
app.setShowSettings(false);
60+
app.setSettings(settings);
61+
app.start();
62+
}
63+
64+
@Override
65+
public void simpleInitApp() {
66+
viewPort.setBackgroundColor(new ColorRGBA(0.04f, 0.08f, 0.18f, 1f));
67+
cube = new Geometry("smoke cube", new Box(1, 1, 1));
68+
Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
69+
material.setColor("Color", new ColorRGBA(1f, 0.35f, 0.02f, 1f));
70+
cube.setMaterial(material);
71+
rootNode.attachChild(cube);
72+
}
73+
74+
@Override
75+
public void simpleUpdate(float tpf) {
76+
cube.rotate(0.4f * tpf, 1.1f * tpf, 0.2f * tpf);
77+
}
78+
}

jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglCanvas.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -467,6 +467,16 @@ public boolean checkVisibilityState() {
467467
return canvas.isDisplayable() && canvas.isShowing();
468468
}
469469

470+
@Override
471+
protected boolean usesSdlMainThread() {
472+
return false;
473+
}
474+
475+
@Override
476+
protected boolean usesSdlGlFunctionProvider() {
477+
return false;
478+
}
479+
470480
/**
471481
* Here the entire GL context is rendered and initialized.
472482
*/

jme3-lwjgl3/src/main/java/com/jme3/system/lwjgl/LwjglContext.java

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@
6969
import org.lwjgl.opengl.GL11;
7070
import org.lwjgl.opengl.GL30;
7171

72-
import static org.lwjgl.opengl.GL.createCapabilities;
7372
import static org.lwjgl.opengl.GL11.glGetInteger;
7473
import org.lwjgl.opengl.GLCapabilities;
7574
import org.lwjgl.opengles.GLES;
@@ -207,22 +206,26 @@ protected void initContextFirstTime() {
207206
private void initContext(boolean first) {
208207

209208
final String renderer = settings.getRenderer();
209+
final boolean glesContext = AppSettings.ANGLE_GLES3.equals(renderer);
210210
final boolean auxFramebufferSrgb = useAuxFramebufferSrgb();
211211

212-
if (first) {
213-
GL gl;
214-
GLExt glext;
215-
GLFbo glfbo;
216-
if (!useAngle) {
212+
if (!SUPPORTED_RENDERS.contains(renderer)) {
213+
throw new UnsupportedOperationException(
214+
"The SDL3 LWJGL backend supports only OpenGL 3.2+ and ANGLE GLES3. Requested renderer: "
215+
+ renderer);
216+
}
217217

218-
final GLCapabilities capabilities = createCapabilities(true);
218+
if (!glesContext) {
219+
final GLCapabilities capabilities = createOpenGLCapabilities();
219220

220-
if (!SUPPORTED_RENDERS.contains(renderer)) {
221-
throw new UnsupportedOperationException("Unsupported renderer: " + renderer);
222-
} else if (!capabilities.OpenGL32) {
223-
throw new RendererException("OpenGL 3.2 core profile or higher is required for the LWJGL3 backend");
224-
}
221+
if (!capabilities.OpenGL32) {
222+
throw new RendererException("OpenGL 3.2 core profile or higher is required for the LWJGL3 backend");
223+
}
225224

225+
if (first) {
226+
GL gl;
227+
GLExt glext;
228+
GLFbo glfbo;
226229
gl = new LwjglGL();
227230
glext = new LwjglGLExt();
228231

@@ -256,8 +259,20 @@ private void initContext(boolean first) {
256259
ARBDebugOutput.glDebugMessageCallbackARB(new LwjglGLDebugOutputHandler(), 0);
257260
}
258261

259-
} else {
260-
final GLESCapabilities capabilities = GLES.createCapabilities();
262+
this.renderer = new GLRenderer(gl, glext, glfbo);
263+
if (this.settings.isGraphicsDebug()) ((GLRenderer)this.renderer).setDebugEnabled(true);
264+
}
265+
} else {
266+
final GLESCapabilities capabilities = createOpenGLESCapabilities();
267+
268+
if (!capabilities.GLES30) {
269+
throw new RendererException("OpenGL ES 3.0 or higher is required for ANGLE GLES3");
270+
}
271+
272+
if (first) {
273+
GL gl;
274+
GLExt glext;
275+
GLFbo glfbo;
261276
LwjglGLES gles = new LwjglGLES();
262277

263278
if (settings.isGraphicsDebug()) {
@@ -280,11 +295,11 @@ private void initContext(boolean first) {
280295
gl = gles;
281296
glext = gles;
282297
glfbo = gles;
283-
298+
this.renderer = new GLRenderer(gl, glext, glfbo);
299+
if (this.settings.isGraphicsDebug()) ((GLRenderer)this.renderer).setDebugEnabled(true);
284300
}
285-
this.renderer = new GLRenderer(gl, glext, glfbo);
286-
if (this.settings.isGraphicsDebug()) ((GLRenderer)this.renderer).setDebugEnabled(true);
287301
}
302+
288303
this.renderer.initialize();
289304

290305
boolean isSrgbFb = settings.isGammaCorrection();
@@ -328,6 +343,14 @@ private void initContext(boolean first) {
328343
renderable.set(true);
329344
}
330345

346+
protected GLCapabilities createOpenGLCapabilities() {
347+
return org.lwjgl.opengl.GL.createCapabilities(true);
348+
}
349+
350+
protected GLESCapabilities createOpenGLESCapabilities() {
351+
return GLES.createCapabilities();
352+
}
353+
331354
protected boolean useAuxFramebufferSrgb() {
332355
return false;
333356
}

0 commit comments

Comments
 (0)