|
|
|
@ -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,123 +48,123 @@ 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) |
|
|
|
|
* @see RenderState#setDepthTest(boolean) |
|
|
|
|
*/ |
|
|
|
|
public boolean depthTestEnabled = false; |
|
|
|
|
public boolean depthTestEnabled; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see RenderState#setDepthWrite(boolean) |
|
|
|
|
* @see RenderState#setDepthWrite(boolean) |
|
|
|
|
*/ |
|
|
|
|
public boolean depthWriteEnabled = true; |
|
|
|
|
public boolean depthWriteEnabled; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see RenderState#setColorWrite(boolean) |
|
|
|
|
* @see RenderState#setColorWrite(boolean) |
|
|
|
|
*/ |
|
|
|
|
public boolean colorWriteEnabled = true; |
|
|
|
|
public boolean colorWriteEnabled; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see Renderer#setClipRect(int, int, int, int) |
|
|
|
|
* @see Renderer#setClipRect(int, int, int, int) |
|
|
|
|
*/ |
|
|
|
|
public boolean clipRectEnabled = false; |
|
|
|
|
public boolean clipRectEnabled; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see RenderState#setPolyOffset(float, float) |
|
|
|
|
* @see RenderState#setPolyOffset(float, float) |
|
|
|
|
*/ |
|
|
|
|
public boolean polyOffsetEnabled = false; |
|
|
|
|
|
|
|
|
|
public boolean polyOffsetEnabled; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see RenderState#setPolyOffset(float, float) |
|
|
|
|
* @see RenderState#setPolyOffset(float, float) |
|
|
|
|
*/ |
|
|
|
|
public float polyOffsetFactor = 0; |
|
|
|
|
|
|
|
|
|
public float polyOffsetFactor; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see RenderState#setPolyOffset(float, float) |
|
|
|
|
* @see RenderState#setPolyOffset(float, float) |
|
|
|
|
*/ |
|
|
|
|
public float polyOffsetUnits = 0; |
|
|
|
|
public float polyOffsetUnits; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see Mesh#setPointSize(float) |
|
|
|
|
* @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) |
|
|
|
|
* @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) |
|
|
|
|
* @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) |
|
|
|
|
* @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) |
|
|
|
|
* @see RenderState#setWireframe(boolean) |
|
|
|
|
*/ |
|
|
|
|
public boolean wireframe = false; |
|
|
|
|
public boolean wireframe; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see Renderer#setShader(com.jme3.shader.Shader) |
|
|
|
|
* @see Renderer#setShader(com.jme3.shader.Shader) |
|
|
|
|
*/ |
|
|
|
|
public int boundShaderProgram; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see Renderer#setShader(com.jme3.shader.Shader) |
|
|
|
|
* @see Renderer#setShader(com.jme3.shader.Shader) |
|
|
|
|
*/ |
|
|
|
|
public Shader boundShader; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
*/ |
|
|
|
|
public int boundFBO = 0; |
|
|
|
|
|
|
|
|
|
public int boundFBO; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
*/ |
|
|
|
|
public FrameBuffer boundFB; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Currently bound Renderbuffer |
|
|
|
|
* |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
* |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
*/ |
|
|
|
|
public int boundRB = 0; |
|
|
|
|
public int boundRB; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Currently bound draw buffer |
|
|
|
@ -174,20 +173,20 @@ public class RenderContext { |
|
|
|
|
* 0 = GL_COLOR_ATTACHMENT0 |
|
|
|
|
* n = GL_COLOR_ATTACHMENTn |
|
|
|
|
* where n is an integer greater than 1 |
|
|
|
|
* |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
* @see FrameBuffer#setTargetIndex(int) |
|
|
|
|
* |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
* @see FrameBuffer#setTargetIndex(int) |
|
|
|
|
*/ |
|
|
|
|
public int boundDrawBuf = -1; |
|
|
|
|
public int boundDrawBuf; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Currently bound read buffer |
|
|
|
|
* |
|
|
|
|
* @see RenderContext#boundDrawBuf |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
* @see FrameBuffer#setTargetIndex(int) |
|
|
|
|
* @see Renderer#setFrameBuffer(com.jme3.texture.FrameBuffer) |
|
|
|
|
* @see FrameBuffer#setTargetIndex(int) |
|
|
|
|
*/ |
|
|
|
|
public int boundReadBuf = -1; |
|
|
|
|
public int boundReadBuf; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Currently bound element array vertex buffer. |
|
|
|
@ -207,118 +206,114 @@ public class RenderContext { |
|
|
|
|
* @see Renderer#renderMesh(com.jme3.scene.Mesh, int, int, com.jme3.scene.VertexBuffer[]) |
|
|
|
|
*/ |
|
|
|
|
public int boundArrayVBO; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Currently bound pixel pack pixel buffer. |
|
|
|
|
*/ |
|
|
|
|
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) |
|
|
|
|
* |
|
|
|
|
* @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) |
|
|
|
|
* |
|
|
|
|
* @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) |
|
|
|
|
* |
|
|
|
|
* @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); |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Reset the RenderContext to default GL state |
|
|
|
|
*/ |
|
|
|
|
public void reset(){ |
|
|
|
|
|
|
|
|
|
public ColorRGBA clearColor = new ColorRGBA(0, 0, 0, 0); |
|
|
|
|
|
|
|
|
|
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; |
|
|
|
|
boundFB = null; |
|
|
|
|
boundRB = 0; |
|
|
|
|
boundDrawBuf = -1; |
|
|
|
|
boundDrawBuf = -1; |
|
|
|
|
boundReadBuf = -1; |
|
|
|
|
boundElementArrayVBO = 0; |
|
|
|
|
boundVertexArray = 0; |
|
|
|
|
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; |
|
|
|
@ -327,9 +322,30 @@ public class RenderContext { |
|
|
|
|
backStencilDepthPassOperation = RenderState.StencilOperation.Keep; |
|
|
|
|
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(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|