Moved glBlendEquationSeparate from GL2 interface to GL interface. Added an example of the feature. Minors issues.
This commit is contained in:
parent
d1aae8d479
commit
bffa2191e5
@ -523,4 +523,9 @@ public class AndroidGL implements GL, GLExt, GLFbo {
|
|||||||
public Object glFenceSync(int condition, int flags) {
|
public Object glFenceSync(int condition, int flags) {
|
||||||
throw new UnsupportedOperationException("OpenGL ES 2 does not support sync fences");
|
throw new UnsupportedOperationException("OpenGL ES 2 does not support sync fences");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBlendEquationSeparate(int colorMode, int alphaMode) {
|
||||||
|
GLES20.glBlendEquationSeparate(colorMode, alphaMode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1501,7 +1501,7 @@ public class RenderState implements Cloneable, Savable {
|
|||||||
if (additionalState.applyBlendEquationAlpha) {
|
if (additionalState.applyBlendEquationAlpha) {
|
||||||
state.blendEquationAlpha = additionalState.blendEquationAlpha;
|
state.blendEquationAlpha = additionalState.blendEquationAlpha;
|
||||||
} else {
|
} else {
|
||||||
state.blendEquation = blendEquation;
|
state.blendEquationAlpha = blendEquationAlpha;
|
||||||
}
|
}
|
||||||
if (additionalState.applyBlendMode) {
|
if (additionalState.applyBlendMode) {
|
||||||
state.blendMode = additionalState.blendMode;
|
state.blendMode = additionalState.blendMode;
|
||||||
|
@ -69,6 +69,9 @@ public interface GL {
|
|||||||
public static final int GL_EXTENSIONS = 0x1F03;
|
public static final int GL_EXTENSIONS = 0x1F03;
|
||||||
public static final int GL_FALSE = 0x0;
|
public static final int GL_FALSE = 0x0;
|
||||||
public static final int GL_FLOAT = 0x1406;
|
public static final int GL_FLOAT = 0x1406;
|
||||||
|
public static final int GL_FUNC_ADD = 0x8006;
|
||||||
|
public static final int GL_FUNC_SUBTRACT = 0x800A;
|
||||||
|
public static final int GL_FUNC_REVERSE_SUBTRACT = 0x800B;
|
||||||
public static final int GL_FRAGMENT_SHADER = 0x8B30;
|
public static final int GL_FRAGMENT_SHADER = 0x8B30;
|
||||||
public static final int GL_FRONT = 0x404;
|
public static final int GL_FRONT = 0x404;
|
||||||
public static final int GL_FRONT_AND_BACK = 0x408;
|
public static final int GL_FRONT_AND_BACK = 0x408;
|
||||||
@ -95,6 +98,7 @@ public interface GL {
|
|||||||
public static final int GL_LINK_STATUS = 0x8B82;
|
public static final int GL_LINK_STATUS = 0x8B82;
|
||||||
public static final int GL_LUMINANCE = 0x1909;
|
public static final int GL_LUMINANCE = 0x1909;
|
||||||
public static final int GL_LUMINANCE_ALPHA = 0x190A;
|
public static final int GL_LUMINANCE_ALPHA = 0x190A;
|
||||||
|
public static final int GL_MAX = 0x8008;
|
||||||
public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
|
public static final int GL_MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C;
|
||||||
public static final int GL_MAX_TEXTURE_IMAGE_UNITS = 0x8872;
|
public static final int GL_MAX_TEXTURE_IMAGE_UNITS = 0x8872;
|
||||||
public static final int GL_MAX_TEXTURE_SIZE = 0xD33;
|
public static final int GL_MAX_TEXTURE_SIZE = 0xD33;
|
||||||
@ -103,6 +107,7 @@ public interface GL {
|
|||||||
public static final int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A;
|
public static final int GL_MAX_VERTEX_UNIFORM_COMPONENTS = 0x8B4A;
|
||||||
public static final int GL_MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
|
public static final int GL_MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB;
|
||||||
public static final int GL_MIRRORED_REPEAT = 0x8370;
|
public static final int GL_MIRRORED_REPEAT = 0x8370;
|
||||||
|
public static final int GL_MIN = 0x8007;
|
||||||
public static final int GL_NEAREST = 0x2600;
|
public static final int GL_NEAREST = 0x2600;
|
||||||
public static final int GL_NEAREST_MIPMAP_LINEAR = 0x2702;
|
public static final int GL_NEAREST_MIPMAP_LINEAR = 0x2702;
|
||||||
public static final int GL_NEAREST_MIPMAP_NEAREST = 0x2700;
|
public static final int GL_NEAREST_MIPMAP_NEAREST = 0x2700;
|
||||||
@ -188,6 +193,7 @@ public interface GL {
|
|||||||
public void glAttachShader(int program, int shader);
|
public void glAttachShader(int program, int shader);
|
||||||
public void glBindBuffer(int target, int buffer);
|
public void glBindBuffer(int target, int buffer);
|
||||||
public void glBindTexture(int target, int texture);
|
public void glBindTexture(int target, int texture);
|
||||||
|
public void glBlendEquationSeparate(int colorMode, int alphaMode);
|
||||||
public void glBlendFunc(int sfactor, int dfactor);
|
public void glBlendFunc(int sfactor, int dfactor);
|
||||||
public void glBufferData(int target, long data_size, int usage);
|
public void glBufferData(int target, long data_size, int usage);
|
||||||
public void glBufferData(int target, FloatBuffer data, int usage);
|
public void glBufferData(int target, FloatBuffer data, int usage);
|
||||||
|
@ -71,14 +71,8 @@ public interface GL2 extends GL {
|
|||||||
public static final int GL_TEXTURE_WRAP_R = 0x8072;
|
public static final int GL_TEXTURE_WRAP_R = 0x8072;
|
||||||
public static final int GL_VERTEX_PROGRAM_POINT_SIZE = 0x8642;
|
public static final int GL_VERTEX_PROGRAM_POINT_SIZE = 0x8642;
|
||||||
public static final int GL_UNSIGNED_INT_8_8_8_8 = 0x8035;
|
public static final int GL_UNSIGNED_INT_8_8_8_8 = 0x8035;
|
||||||
public static final int GL_FUNC_ADD = 0x8006;
|
|
||||||
public static final int GL_FUNC_SUBTRACT = 0x800A;
|
|
||||||
public static final int GL_FUNC_REVERSE_SUBTRACT = 0x800B;
|
|
||||||
public static final int GL_MIN = 0x8007;
|
|
||||||
public static final int GL_MAX = 0x8008;
|
|
||||||
|
|
||||||
public void glAlphaFunc(int func, float ref);
|
public void glAlphaFunc(int func, float ref);
|
||||||
public void glBlendEquationSeparate(int colorMode, int alphaMode);
|
|
||||||
public void glPointSize(float size);
|
public void glPointSize(float size);
|
||||||
public void glPolygonMode(int face, int mode);
|
public void glPolygonMode(int face, int mode);
|
||||||
public void glDrawBuffer(int mode);
|
public void glDrawBuffer(int mode);
|
||||||
|
@ -102,7 +102,7 @@ public class GLDebugDesktop extends GLDebugES implements GL2, GL3, GL4 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void glBlendEquationSeparate(int colorMode, int alphaMode) {
|
public void glBlendEquationSeparate(int colorMode, int alphaMode) {
|
||||||
gl2.glBlendEquationSeparate(colorMode, alphaMode);
|
gl.glBlendEquationSeparate(colorMode, alphaMode);
|
||||||
checkError();
|
checkError();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -560,4 +560,9 @@ public class GLDebugES extends GLDebug implements GL, GLFbo, GLExt {
|
|||||||
checkError();
|
checkError();
|
||||||
return sync;
|
return sync;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void glBlendEquationSeparate(int colorMode, int alphaMode) {
|
||||||
|
gl.glBlendEquationSeparate(colorMode, alphaMode);
|
||||||
|
checkError();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -747,7 +747,7 @@ public final class GLRenderer implements Renderer {
|
|||||||
+ state.getBlendMode());
|
+ state.getBlendMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gl2 != null && (state.getBlendEquation() != context.blendEquation || state.getBlendEquationAlpha() != context.blendEquationAlpha)) {
|
if (state.getBlendEquation() != context.blendEquation || state.getBlendEquationAlpha() != context.blendEquationAlpha) {
|
||||||
int colorMode = convertBlendEquation(state.getBlendEquation());
|
int colorMode = convertBlendEquation(state.getBlendEquation());
|
||||||
int alphaMode;
|
int alphaMode;
|
||||||
if (state.getBlendEquationAlpha() == RenderState.BlendEquationAlpha.InheritColor) {
|
if (state.getBlendEquationAlpha() == RenderState.BlendEquationAlpha.InheritColor) {
|
||||||
@ -755,8 +755,9 @@ public final class GLRenderer implements Renderer {
|
|||||||
} else {
|
} else {
|
||||||
alphaMode = convertBlendEquationAlpha(state.getBlendEquationAlpha());
|
alphaMode = convertBlendEquationAlpha(state.getBlendEquationAlpha());
|
||||||
}
|
}
|
||||||
gl2.glBlendEquationSeparate(colorMode, alphaMode);
|
gl.glBlendEquationSeparate(colorMode, alphaMode);
|
||||||
context.blendEquation = state.getBlendEquation();
|
context.blendEquation = state.getBlendEquation();
|
||||||
|
context.blendEquationAlpha = state.getBlendEquationAlpha();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2009-2016 jMonkeyEngine
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are
|
||||||
|
* met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
|
||||||
|
* may be used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||||
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||||
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
package jme3test.renderer;
|
||||||
|
|
||||||
|
import com.jme3.app.SimpleApplication;
|
||||||
|
import com.jme3.light.DirectionalLight;
|
||||||
|
import com.jme3.material.Material;
|
||||||
|
import com.jme3.material.RenderState;
|
||||||
|
import com.jme3.math.ColorRGBA;
|
||||||
|
import com.jme3.math.Vector3f;
|
||||||
|
import com.jme3.renderer.queue.RenderQueue;
|
||||||
|
import com.jme3.scene.Geometry;
|
||||||
|
import com.jme3.scene.shape.Quad;
|
||||||
|
|
||||||
|
public class TestBlendEquations extends SimpleApplication {
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
TestBlendEquations app = new TestBlendEquations();
|
||||||
|
app.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void simpleInitApp() {
|
||||||
|
Geometry teaGeom = (Geometry) assetManager.loadModel("Models/Teapot/Teapot.obj");
|
||||||
|
teaGeom.scale(6);
|
||||||
|
teaGeom.getMaterial().getAdditionalRenderState().setBlendEquation(RenderState.BlendEquation.Add);
|
||||||
|
teaGeom.move(0, -2f, 0);
|
||||||
|
|
||||||
|
DirectionalLight dl = new DirectionalLight();
|
||||||
|
dl.setColor(ColorRGBA.Red);
|
||||||
|
dl.setDirection(Vector3f.UNIT_XYZ.negate());
|
||||||
|
|
||||||
|
rootNode.addLight(dl);
|
||||||
|
rootNode.attachChild(teaGeom);
|
||||||
|
|
||||||
|
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
|
||||||
|
mat.setColor("Color", new ColorRGBA(0.5f, 0f, 1f, 0.3f));
|
||||||
|
mat.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Color);
|
||||||
|
mat.getAdditionalRenderState().setBlendEquation(RenderState.BlendEquation.Subtract);
|
||||||
|
|
||||||
|
Geometry geo = new Geometry("BottomLeft", new Quad(guiViewPort.getCamera().getWidth() / 2, guiViewPort.getCamera().getHeight() / 2));
|
||||||
|
geo.setMaterial(mat);
|
||||||
|
geo.setQueueBucket(RenderQueue.Bucket.Gui);
|
||||||
|
geo.setLocalTranslation(0, 0, 1);
|
||||||
|
|
||||||
|
guiNode.attachChild(geo);
|
||||||
|
|
||||||
|
Material m = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
|
||||||
|
m.getAdditionalRenderState().setBlendEquation(RenderState.BlendEquation.ReverseSubtract);
|
||||||
|
m.setColor("Color", new ColorRGBA(0.0f, 1f, 1.f, 1f));
|
||||||
|
m.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.AlphaAdditive);
|
||||||
|
|
||||||
|
geo = new Geometry("BottomRight", new Quad(guiViewPort.getCamera().getWidth() / 2, guiViewPort.getCamera().getHeight() / 2));
|
||||||
|
geo.setMaterial(m);
|
||||||
|
geo.setQueueBucket(RenderQueue.Bucket.Gui);
|
||||||
|
geo.setLocalTranslation(guiViewPort.getCamera().getWidth() / 2, 0, 1);
|
||||||
|
|
||||||
|
guiNode.attachChild(geo);
|
||||||
|
|
||||||
|
m = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
|
||||||
|
m.getAdditionalRenderState().setBlendEquation(RenderState.BlendEquation.Min);
|
||||||
|
m.setColor("Color", new ColorRGBA(0.3f, 0f, 0.1f, 0.3f));
|
||||||
|
m.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Additive);
|
||||||
|
|
||||||
|
geo = new Geometry("TopRight", new Quad(guiViewPort.getCamera().getWidth() / 2, guiViewPort.getCamera().getHeight() / 2));
|
||||||
|
geo.setMaterial(m);
|
||||||
|
geo.setQueueBucket(RenderQueue.Bucket.Gui);
|
||||||
|
geo.setLocalTranslation(guiViewPort.getCamera().getWidth() / 2, guiViewPort.getCamera().getHeight() / 2, 1);
|
||||||
|
|
||||||
|
guiNode.attachChild(geo);
|
||||||
|
|
||||||
|
geo = new Geometry("OverTeaPot", new Quad(guiViewPort.getCamera().getWidth() / 2, guiViewPort.getCamera().getHeight() / 2));
|
||||||
|
geo.setMaterial(mat);
|
||||||
|
geo.setQueueBucket(RenderQueue.Bucket.Transparent);
|
||||||
|
geo.setLocalTranslation(0, -100, 5);
|
||||||
|
|
||||||
|
rootNode.attachChild(geo);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -78,6 +78,11 @@ public class IosGL implements GL, GLExt, GLFbo {
|
|||||||
checkLimit(buffer);
|
checkLimit(buffer);
|
||||||
return buffer.limit() / elementSize;
|
return buffer.limit() / elementSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void glBlendEquationSeparate(int colorMode, int alphaMode) {
|
||||||
|
JmeIosGLES.glBlendEquationSeparate(colorMode, alphaMode);
|
||||||
|
}
|
||||||
|
|
||||||
private int toArray(IntBuffer buffer) {
|
private int toArray(IntBuffer buffer) {
|
||||||
int remain = buffer.remaining();
|
int remain = buffer.remaining();
|
||||||
|
@ -142,6 +142,7 @@ public class JmeIosGLES {
|
|||||||
public static native void glBindRenderbuffer(int target, int renderbuffer);
|
public static native void glBindRenderbuffer(int target, int renderbuffer);
|
||||||
public static native void glBindTexture(int target, int texture);
|
public static native void glBindTexture(int target, int texture);
|
||||||
// public static native void glBindVertexArray // TODO: Investigate this
|
// public static native void glBindVertexArray // TODO: Investigate this
|
||||||
|
public static native void glBlendEquationSeparate(int colorMode, int alphaMode);
|
||||||
public static native void glBlendFunc(int sfactor, int dfactor);
|
public static native void glBlendFunc(int sfactor, int dfactor);
|
||||||
public static native void glBufferData(int target, int size, Buffer data, int usage);
|
public static native void glBufferData(int target, int size, Buffer data, int usage);
|
||||||
public static native void glBufferData2(int target, int size, byte[] data, int offset, int usage);
|
public static native void glBufferData2(int target, int size, byte[] data, int offset, int usage);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user