* Test case for issue #801

* Reset the context with the initial values
v3.3
Toni Helenius 5 years ago committed by Paul Speed
parent 753c3cc173
commit 9002d088e7
  1. 140
      jme3-core/src/main/java/com/jme3/renderer/RenderContext.java
  2. 87
      jme3-examples/src/main/java/jme3test/renderer/TestIssue801.java

@ -32,7 +32,6 @@
package com.jme3.renderer;
import com.jme3.material.RenderState;
import com.jme3.material.RenderState.BlendFunc;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Mesh;
import com.jme3.scene.VertexBuffer;
@ -49,96 +48,96 @@ public class RenderContext {
/**
* @see RenderState#setFaceCullMode(com.jme3.material.RenderState.FaceCullMode)
*/
public RenderState.FaceCullMode cullMode = RenderState.FaceCullMode.Off;
public RenderState.FaceCullMode cullMode;
/**
* @see RenderState#setDepthTest(boolean)
*/
public boolean depthTestEnabled = false;
public boolean depthTestEnabled;
/**
* @see RenderState#setDepthWrite(boolean)
*/
public boolean depthWriteEnabled = true;
public boolean depthWriteEnabled;
/**
* @see RenderState#setColorWrite(boolean)
*/
public boolean colorWriteEnabled = true;
public boolean colorWriteEnabled;
/**
* @see Renderer#setClipRect(int, int, int, int)
*/
public boolean clipRectEnabled = false;
public boolean clipRectEnabled;
/**
* @see RenderState#setPolyOffset(float, float)
*/
public boolean polyOffsetEnabled = false;
public boolean polyOffsetEnabled;
/**
* @see RenderState#setPolyOffset(float, float)
*/
public float polyOffsetFactor = 0;
public float polyOffsetFactor;
/**
* @see RenderState#setPolyOffset(float, float)
*/
public float polyOffsetUnits = 0;
public float polyOffsetUnits;
/**
* @see Mesh#setPointSize(float)
*/
public float pointSize = 1;
public float pointSize;
/**
* @see RenderState#setLineWidth(float)
*/
public float lineWidth = 1;
public float lineWidth;
/**
* @see RenderState#setBlendMode(com.jme3.material.RenderState.BlendMode)
*/
public RenderState.BlendMode blendMode = RenderState.BlendMode.Off;
public RenderState.BlendMode blendMode;
/**
* @see RenderState#setBlendEquation(com.jme3.material.RenderState.BlendEquation)
*/
public RenderState.BlendEquation blendEquation = RenderState.BlendEquation.Add;
public RenderState.BlendEquation blendEquation;
/**
* @see RenderState#setBlendEquationAlpha(com.jme3.material.RenderState.BlendEquationAlpha)
*/
public RenderState.BlendEquationAlpha blendEquationAlpha = RenderState.BlendEquationAlpha.InheritColor;
public RenderState.BlendEquationAlpha blendEquationAlpha;
/**
* @see RenderState#setCustomBlendFactors(com.jme3.material.RenderState.BlendFunc, com.jme3.material.RenderState.BlendFunc,
* com.jme3.material.RenderState.BlendFunc, com.jme3.material.RenderState.BlendFunc)
*/
public RenderState.BlendFunc sfactorRGB = RenderState.BlendFunc.One;
public RenderState.BlendFunc sfactorRGB;
/**
* @see RenderState#setCustomBlendFactors(com.jme3.material.RenderState.BlendFunc, com.jme3.material.RenderState.BlendFunc,
* com.jme3.material.RenderState.BlendFunc, com.jme3.material.RenderState.BlendFunc)
*/
public RenderState.BlendFunc dfactorRGB = RenderState.BlendFunc.One;
public RenderState.BlendFunc dfactorRGB;
/**
* @see RenderState#setCustomBlendFactors(com.jme3.material.RenderState.BlendFunc, com.jme3.material.RenderState.BlendFunc,
* com.jme3.material.RenderState.BlendFunc, com.jme3.material.RenderState.BlendFunc)
*/
public RenderState.BlendFunc sfactorAlpha = RenderState.BlendFunc.One;
public RenderState.BlendFunc sfactorAlpha;
/**
* @see RenderState#setCustomBlendFactors(com.jme3.material.RenderState.BlendFunc, com.jme3.material.RenderState.BlendFunc,
* com.jme3.material.RenderState.BlendFunc, com.jme3.material.RenderState.BlendFunc)
*/
public RenderState.BlendFunc dfactorAlpha = RenderState.BlendFunc.One;
public RenderState.BlendFunc dfactorAlpha;
/**
* @see RenderState#setWireframe(boolean)
*/
public boolean wireframe = false;
public boolean wireframe;
/**
* @see Renderer#setShader(com.jme3.shader.Shader)
@ -153,7 +152,7 @@ public class RenderContext {
/**
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer)
*/
public int boundFBO = 0;
public int boundFBO;
/**
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer)
@ -165,7 +164,7 @@ public class RenderContext {
*
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer)
*/
public int boundRB = 0;
public int boundRB;
/**
* Currently bound draw buffer
@ -178,7 +177,7 @@ public class RenderContext {
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer)
* @see FrameBuffer#setTargetIndex(int)
*/
public int boundDrawBuf = -1;
public int boundDrawBuf;
/**
* Currently bound read buffer
@ -187,7 +186,7 @@ public class RenderContext {
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer)
* @see FrameBuffer#setTargetIndex(int)
*/
public int boundReadBuf = -1;
public int boundReadBuf;
/**
* Currently bound element array vertex buffer.
@ -213,89 +212,93 @@ public class RenderContext {
*/
public int boundPixelPackPBO;
public int numTexturesSet = 0;
public int numTexturesSet;
/**
* Current bound texture IDs for each texture unit.
*
* @see Renderer#setTexture(int, com.jme3.texture.Texture)
*/
public Image[] boundTextures = new Image[16];
public final Image[] boundTextures = new Image[16];
/**
* IDList for texture units
*
* @see Renderer#setTexture(int, com.jme3.texture.Texture)
*/
public IDList textureIndexList = new IDList();
public final IDList textureIndexList = new IDList();
/**
* Currently bound texture unit
*
* @see Renderer#setTexture(int, com.jme3.texture.Texture)
*/
public int boundTextureUnit = 0;
public int boundTextureUnit;
/**
* Stencil Buffer state
*/
public boolean stencilTest = false;
public RenderState.StencilOperation frontStencilStencilFailOperation = RenderState.StencilOperation.Keep;
public RenderState.StencilOperation frontStencilDepthFailOperation = RenderState.StencilOperation.Keep;
public RenderState.StencilOperation frontStencilDepthPassOperation = RenderState.StencilOperation.Keep;
public RenderState.StencilOperation backStencilStencilFailOperation = RenderState.StencilOperation.Keep;
public RenderState.StencilOperation backStencilDepthFailOperation = RenderState.StencilOperation.Keep;
public RenderState.StencilOperation backStencilDepthPassOperation = RenderState.StencilOperation.Keep;
public RenderState.TestFunction frontStencilFunction = RenderState.TestFunction.Always;
public RenderState.TestFunction backStencilFunction = RenderState.TestFunction.Always;
public boolean stencilTest;
public RenderState.StencilOperation frontStencilStencilFailOperation;
public RenderState.StencilOperation frontStencilDepthFailOperation;
public RenderState.StencilOperation frontStencilDepthPassOperation;
public RenderState.StencilOperation backStencilStencilFailOperation;
public RenderState.StencilOperation backStencilDepthFailOperation;
public RenderState.StencilOperation backStencilDepthPassOperation;
public RenderState.TestFunction frontStencilFunction;
public RenderState.TestFunction backStencilFunction;
/**
* Vertex attribs currently bound and enabled. If a slot is null, then
* it is disabled.
*/
public VertexBuffer[] boundAttribs = new VertexBuffer[16];
public final VertexBuffer[] boundAttribs = new VertexBuffer[16];
/**
* IDList for vertex attributes
*/
public IDList attribIndexList = new IDList();
public final IDList attribIndexList = new IDList();
/**
* depth test function
*/
public RenderState.TestFunction depthFunc = RenderState.TestFunction.Less;
public RenderState.TestFunction depthFunc;
/**
* alpha test function
*/
public RenderState.TestFunction alphaFunc = RenderState.TestFunction.Greater;
public RenderState.TestFunction alphaFunc;
public int initialDrawBuf;
public int initialReadBuf;
public ColorRGBA clearColor = new ColorRGBA(0,0,0,0);
public ColorRGBA clearColor = new ColorRGBA(0, 0, 0, 0);
/**
* Reset the RenderContext to default GL state
*/
public void reset(){
public RenderContext() {
init();
}
private void init() {
cullMode = RenderState.FaceCullMode.Off;
depthTestEnabled = false;
depthWriteEnabled = false;
colorWriteEnabled = false;
depthWriteEnabled = true;
colorWriteEnabled = true;
clipRectEnabled = false;
polyOffsetEnabled = false;
polyOffsetFactor = 0;
polyOffsetUnits = 0;
pointSize = 1;
lineWidth = 1;
blendMode = RenderState.BlendMode.Off;
blendEquation = RenderState.BlendEquation.Add;
blendEquationAlpha = RenderState.BlendEquationAlpha.InheritColor;
sfactorRGB = BlendFunc.One;
dfactorRGB = BlendFunc.One;
sfactorAlpha = BlendFunc.One;
dfactorAlpha = BlendFunc.One;
sfactorRGB = RenderState.BlendFunc.One;
dfactorRGB = RenderState.BlendFunc.One;
sfactorAlpha = RenderState.BlendFunc.One;
dfactorAlpha = RenderState.BlendFunc.One;
wireframe = false;
boundShaderProgram = 0;
boundShader = null;
boundFBO = 0;
@ -308,17 +311,9 @@ public class RenderContext {
boundArrayVBO = 0;
boundPixelPackPBO = 0;
numTexturesSet = 0;
for (int i = 0; i < boundTextures.length; i++)
boundTextures[i] = null;
textureIndexList.reset();
boundTextureUnit = 0;
for (int i = 0; i < boundAttribs.length; i++)
boundAttribs[i] = null;
attribIndexList.reset();
stencilTest = false;
frontStencilStencilFailOperation = RenderState.StencilOperation.Keep;
frontStencilDepthFailOperation = RenderState.StencilOperation.Keep;
frontStencilDepthPassOperation = RenderState.StencilOperation.Keep;
@ -328,8 +323,29 @@ public class RenderContext {
frontStencilFunction = RenderState.TestFunction.Always;
backStencilFunction = RenderState.TestFunction.Always;
depthFunc = RenderState.TestFunction.LessOrEqual;
depthFunc = RenderState.TestFunction.Less;
alphaFunc = RenderState.TestFunction.Greater;
clearColor.set(0,0,0,0);
cullMode = RenderState.FaceCullMode.Off;
clearColor.set(0, 0, 0, 0);
}
/**
* Reset the RenderContext to default GL state
*/
public void reset(){
init();
for (int i = 0; i < boundTextures.length; i++) {
boundTextures[i] = null;
}
textureIndexList.reset();
for (int i = 0; i < boundAttribs.length; i++) {
boundAttribs[i] = null;
}
attribIndexList.reset();
}
}

@ -0,0 +1,87 @@
/*
* Copyright (c) 2009-2020 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.input.KeyInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import com.jme3.system.AppSettings;
public class TestIssue801 extends SimpleApplication {
public static void main(String[] args) {
AppSettings initialSettings = new AppSettings(true);
initialSettings.setBitsPerPixel(24);
TestIssue801 app = new TestIssue801();
app.setSettings(initialSettings);
app.start();
}
@Override
public void simpleInitApp() {
viewPort.setBackgroundColor(new ColorRGBA(0.3f, 0.3f, 0.3f, 1f));
Box b = new Box(1, 1, 1);
Geometry geom = new Geometry("Box", b);
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Blue);
geom.setMaterial(mat);
rootNode.attachChild(geom);
inputManager.addMapping("changeBpp", new KeyTrigger(KeyInput.KEY_P));
ActionListener listener = new ActionListener() {
@Override
public void onAction(String name, boolean keyPressed, float tpf) {
if (name.equals("changeBpp") && keyPressed) {
goWindowed();
}
}
};
inputManager.addListener(listener, "changeBpp");
}
void goWindowed() {
AppSettings newSettings = new AppSettings(false);
newSettings.copyFrom(settings);
newSettings.setBitsPerPixel(16);
setSettings(newSettings);
restart();
}
}
Loading…
Cancel
Save