From a3056ea87474b6469fefa9975c16096bf9e45173 Mon Sep 17 00:00:00 2001 From: Wyatt Gillette Date: Tue, 27 May 2025 19:30:44 +0200 Subject: [PATCH 1/3] Update GLRenderer.java --- .../com/jme3/renderer/opengl/GLRenderer.java | 48 ++++++++----------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index 811bab583c..a74f642c66 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2024 jMonkeyEngine + * Copyright (c) 2009-2025 jMonkeyEngine * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -129,7 +129,7 @@ public GLRenderer(GL gl, GLExt glext, GLFbo glfbo) { this.glext = glext; this.texUtil = new TextureUtil(gl, gl2, glext); } - + /** * Enable/Disable default automatic generation of mipmaps for framebuffers * @param v Default is true @@ -159,14 +159,14 @@ public void pushDebugGroup(String name) { } } - + @Override public Statistics getStatistics() { return statistics; } - @Override + @Override public EnumSet getCaps() { return caps; } @@ -223,7 +223,7 @@ private void loadCapabilitiesES() { String version = gl.glGetString(GL.GL_VERSION); int oglVer = extractVersion(version); if (isWebGL(version)) { - caps.add(Caps.WebGL); + caps.add(Caps.WebGL); } caps.add(Caps.GLSL100); caps.add(Caps.OpenGLES20); @@ -709,7 +709,7 @@ public void initialize() { }else if(gl instanceof GLES_30){ ((GLES_30)gl).glGenVertexArrays(intBuf16); int vaoId = intBuf16.get(0); - ((GLES_30)gl).glBindVertexArray(vaoId); + ((GLES_30)gl).glBindVertexArray(vaoId); } else{ throw new UnsupportedOperationException("Core profile not supported"); } @@ -1288,7 +1288,7 @@ private boolean isValidNumber(FloatBuffer fb) { } return true; } - + private boolean isValidNumber(Vector2f v) { return isValidNumber(v.x) && isValidNumber(v.y); } @@ -1453,7 +1453,7 @@ protected void updateShaderBufferBlock(final Shader shader, final ShaderBufferBl final BufferObject bufferObject = bufferBlock.getBufferObject(); final BufferType bufferType = bufferBlock.getType(); - + if (bufferObject.isUpdateNeeded()) { if (bufferType == BufferType.ShaderStorageBufferObject) { @@ -1483,7 +1483,7 @@ protected void updateShaderBufferBlock(final Shader shader, final ShaderBufferBl } if (bufferBlock.getLocation() != NativeObject.INVALID_ID) { gl3.glUniformBlockBinding(shaderId, bufferBlock.getLocation(), bindingPoint); - } + } } break; } @@ -1613,7 +1613,7 @@ public void updateShaderSourceData(ShaderSource source) { } } - + if (linearizeSrgbImages) { stringBuf.append("#define SRGB 1\n"); } @@ -1746,7 +1746,7 @@ public void updateShaderData(Shader shader) { public void setShader(Shader shader) { if (shader == null) { throw new IllegalArgumentException("Shader cannot be null"); - } else { + } else { if (shader.isUpdateNeeded()) { updateShaderData(shader); } @@ -2126,12 +2126,12 @@ public void setReadDrawBuffers(FrameBuffer fb) { final int MRT_OFF = 100; if (fb != null) { - + if (fb.getNumColorBuffers() == 0) { // make sure to select NONE as draw buf // no color buffer attached. - gl2.glDrawBuffer(GL.GL_NONE); - gl2.glReadBuffer(GL.GL_NONE); + gl2.glDrawBuffer(GL.GL_NONE); + gl2.glReadBuffer(GL.GL_NONE); } else { if (fb.getNumColorBuffers() > limits.get(Limits.FrameBufferAttachments)) { throw new RendererException("Framebuffer has more color " @@ -2243,7 +2243,7 @@ private void readFrameBufferWithGLFormat(FrameBuffer fb, ByteBuffer byteBuf, int } setFrameBuffer(fb); - + } else { setFrameBuffer(null); @@ -2722,7 +2722,7 @@ public void setTexture(int unit, Texture tex) throws TextureUnitException { if (unit < 0 || unit >= RenderContext.maxTextureUnits) { throw new TextureUnitException(); } - + Image image = tex.getImage(); if (image.isUpdateNeeded() || (image.isGeneratedMipmapsRequired() && !image.isMipmapsGenerated())) { // Check NPOT requirements @@ -2753,7 +2753,7 @@ public void setTexture(int unit, Texture tex) throws TextureUnitException { if (tex.getName() != null) glext.glObjectLabel(GL.GL_TEXTURE, tex.getImage().getId(), tex.getName()); } } - + @Override public void setTextureImage(int unit, TextureImage tex) throws TextureUnitException { if (unit < 0 || unit >= RenderContext.maxTextureUnits) { @@ -2766,7 +2766,7 @@ public void setTextureImage(int unit, TextureImage tex) throws TextureUnitExcept tex.bindImage(gl4, texUtil, unit); } } - + @Override public void setUniformBufferObject(int bindingPoint, BufferObject bufferObject) { if (bufferObject.isUpdateNeeded()) { @@ -3490,19 +3490,11 @@ public void setMainFrameBufferSrgb(boolean enableSrgb) { setFrameBuffer(null); if (enableSrgb) { - if ( - // Workaround: getBoolean(GLExt.GL_FRAMEBUFFER_SRGB_CAPABLE_EXT) causes error 1280 (invalid enum) on macos - JmeSystem.getPlatform().getOs() != Platform.Os.MacOS - && !getBoolean(GLExt.GL_FRAMEBUFFER_SRGB_CAPABLE_EXT) - ) { - logger.warning("Driver claims that default framebuffer " + "is not sRGB capable. Enabling anyway."); - } - gl.glEnable(GLExt.GL_FRAMEBUFFER_SRGB_EXT); - - logger.log(Level.FINER, "SRGB FrameBuffer enabled (Gamma Correction)"); + logger.log(Level.INFO, "SRGB FrameBuffer enabled (Gamma Correction)"); } else { gl.glDisable(GLExt.GL_FRAMEBUFFER_SRGB_EXT); + logger.log(Level.INFO, "SRGB FrameBuffer disabled (Gamma Correction)"); } } From b3a7fe07dacd40235611e36486bb4b60856fecb0 Mon Sep 17 00:00:00 2001 From: Wyatt Gillette Date: Tue, 27 May 2025 19:48:23 +0200 Subject: [PATCH 2/3] Update GLRenderer.java --- .../main/java/com/jme3/renderer/opengl/GLRenderer.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index a74f642c66..b9b7b33b4d 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -550,7 +550,9 @@ private void loadCapabilitiesCommon() { } // Supports sRGB pipeline. - if ( (hasExtension("GL_ARB_framebuffer_sRGB") && hasExtension("GL_EXT_texture_sRGB")) + if ( (hasExtension("GL_ARB_framebuffer_sRGB") + && hasExtension("GL_EXT_framebuffer_sRGB") + && hasExtension("GL_EXT_texture_sRGB")) || caps.contains(Caps.OpenGL30) || caps.contains(Caps.OpenGLES30)) { caps.add(Caps.Srgb); } @@ -3490,6 +3492,12 @@ public void setMainFrameBufferSrgb(boolean enableSrgb) { setFrameBuffer(null); if (enableSrgb) { + if (!hasExtension("GL_EXT_framebuffer_sRGB")) { + logger.warning("Driver claims that default framebuffer is not sRGB capable. Enabling anyway."); + } +// if (!getBoolean(GLExt.GL_FRAMEBUFFER_SRGB_CAPABLE_EXT)) { +// logger.warning("Driver claims that default framebuffer is not sRGB capable. Enabling anyway."); +// } gl.glEnable(GLExt.GL_FRAMEBUFFER_SRGB_EXT); logger.log(Level.INFO, "SRGB FrameBuffer enabled (Gamma Correction)"); } else { From 0d2b48edf7e7f3923293757d62d468e3fcf01c6f Mon Sep 17 00:00:00 2001 From: Wyatt Gillette Date: Tue, 27 May 2025 20:29:53 +0200 Subject: [PATCH 3/3] Update GLRenderer.java --- .../main/java/com/jme3/renderer/opengl/GLRenderer.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java index b9b7b33b4d..a74f642c66 100644 --- a/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java +++ b/jme3-core/src/main/java/com/jme3/renderer/opengl/GLRenderer.java @@ -550,9 +550,7 @@ private void loadCapabilitiesCommon() { } // Supports sRGB pipeline. - if ( (hasExtension("GL_ARB_framebuffer_sRGB") - && hasExtension("GL_EXT_framebuffer_sRGB") - && hasExtension("GL_EXT_texture_sRGB")) + if ( (hasExtension("GL_ARB_framebuffer_sRGB") && hasExtension("GL_EXT_texture_sRGB")) || caps.contains(Caps.OpenGL30) || caps.contains(Caps.OpenGLES30)) { caps.add(Caps.Srgb); } @@ -3492,12 +3490,6 @@ public void setMainFrameBufferSrgb(boolean enableSrgb) { setFrameBuffer(null); if (enableSrgb) { - if (!hasExtension("GL_EXT_framebuffer_sRGB")) { - logger.warning("Driver claims that default framebuffer is not sRGB capable. Enabling anyway."); - } -// if (!getBoolean(GLExt.GL_FRAMEBUFFER_SRGB_CAPABLE_EXT)) { -// logger.warning("Driver claims that default framebuffer is not sRGB capable. Enabling anyway."); -// } gl.glEnable(GLExt.GL_FRAMEBUFFER_SRGB_EXT); logger.log(Level.INFO, "SRGB FrameBuffer enabled (Gamma Correction)"); } else {