lwjglblendstate.java
来自「java 3d game jme 工程开发源代码」· Java 代码 · 共 424 行 · 第 1/2 页
JAVA
424 行
int glDstRGB = getGLDstValue(getDestinationFunctionRGB());
if (supportsSeparateFunctions()) {
int glSrcAlpha = getGLSrcValue(getSourceFunctionAlpha());
int glDstAlpha = getGLDstValue(getDestinationFunctionAlpha());
if (record.srcFactorRGB != glSrcRGB
|| record.dstFactorRGB != glDstRGB
|| record.srcFactorAlpha != glSrcAlpha
|| record.dstFactorAlpha != glDstAlpha) {
EXTBlendFuncSeparate.glBlendFuncSeparateEXT(glSrcRGB,
glDstRGB, glSrcAlpha, glDstAlpha);
record.srcFactorRGB = glSrcRGB;
record.dstFactorRGB = glDstRGB;
record.srcFactorAlpha = glSrcAlpha;
record.dstFactorAlpha = glDstAlpha;
}
} else if (record.srcFactorRGB != glSrcRGB
|| record.dstFactorRGB != glDstRGB) {
GL11.glBlendFunc(glSrcRGB, glDstRGB);
record.srcFactorRGB = glSrcRGB;
record.dstFactorRGB = glDstRGB;
}
}
} else {
if (enabled) {
int glSrcRGB = getGLSrcValue(getSourceFunctionRGB());
int glDstRGB = getGLDstValue(getDestinationFunctionRGB());
if (supportsSeparateFunctions()) {
int glSrcAlpha = getGLSrcValue(getSourceFunctionAlpha());
int glDstAlpha = getGLDstValue(getDestinationFunctionAlpha());
EXTBlendFuncSeparate.glBlendFuncSeparateEXT(glSrcRGB,
glDstRGB, glSrcAlpha, glDstAlpha);
record.srcFactorRGB = glSrcRGB;
record.dstFactorRGB = glDstRGB;
record.srcFactorAlpha = glSrcAlpha;
record.dstFactorAlpha = glDstAlpha;
} else {
GL11.glBlendFunc(glSrcRGB, glDstRGB);
record.srcFactorRGB = glSrcRGB;
record.dstFactorRGB = glDstRGB;
}
}
}
}
private int getGLSrcValue(SourceFunction function) {
switch (function) {
case Zero:
return GL11.GL_ZERO;
case DestinationColor:
return GL11.GL_DST_COLOR;
case OneMinusDestinationColor:
return GL11.GL_ONE_MINUS_DST_COLOR;
case SourceAlpha:
return GL11.GL_SRC_ALPHA;
case OneMinusSourceAlpha:
return GL11.GL_ONE_MINUS_SRC_ALPHA;
case DestinationAlpha:
return GL11.GL_DST_ALPHA;
case OneMinusDestinationAlpha:
return GL11.GL_ONE_MINUS_DST_ALPHA;
case SourceAlphaSaturate:
return GL11.GL_SRC_ALPHA_SATURATE;
case ConstantColor:
if (supportsConstantColor())
return EXTBlendColor.GL_CONSTANT_COLOR_EXT;
// FALLS THROUGH
case OneMinusConstantColor:
if (supportsConstantColor())
return EXTBlendColor.GL_ONE_MINUS_CONSTANT_COLOR_EXT;
// FALLS THROUGH
case ConstantAlpha:
if (supportsConstantColor())
return EXTBlendColor.GL_CONSTANT_ALPHA_EXT;
// FALLS THROUGH
case OneMinusConstantAlpha:
if (supportsConstantColor())
return EXTBlendColor.GL_ONE_MINUS_CONSTANT_ALPHA_EXT;
// FALLS THROUGH
case One:
return GL11.GL_ONE;
}
throw new IllegalArgumentException("Invalid source function type: "
+ function);
}
private int getGLDstValue(DestinationFunction function) {
switch (function) {
case Zero:
return GL11.GL_ZERO;
case SourceColor:
return GL11.GL_SRC_COLOR;
case OneMinusSourceColor:
return GL11.GL_ONE_MINUS_SRC_COLOR;
case SourceAlpha:
return GL11.GL_SRC_ALPHA;
case OneMinusSourceAlpha:
return GL11.GL_ONE_MINUS_SRC_ALPHA;
case DestinationAlpha:
return GL11.GL_DST_ALPHA;
case OneMinusDestinationAlpha:
return GL11.GL_ONE_MINUS_DST_ALPHA;
case ConstantColor:
if (supportsConstantColor())
return EXTBlendColor.GL_CONSTANT_COLOR_EXT;
// FALLS THROUGH
case OneMinusConstantColor:
if (supportsConstantColor())
return EXTBlendColor.GL_ONE_MINUS_CONSTANT_COLOR_EXT;
// FALLS THROUGH
case ConstantAlpha:
if (supportsConstantColor())
return EXTBlendColor.GL_CONSTANT_ALPHA_EXT;
// FALLS THROUGH
case OneMinusConstantAlpha:
if (supportsConstantColor())
return EXTBlendColor.GL_ONE_MINUS_CONSTANT_ALPHA_EXT;
// FALLS THROUGH
case One:
return GL11.GL_ONE;
}
throw new IllegalArgumentException(
"Invalid destination function type: " + function);
}
private int getGLEquationValue(BlendEquation eq) {
switch (eq) {
case Min:
if (supportsMinMax)
return EXTBlendMinmax.GL_MIN_EXT;
// FALLS THROUGH
case Max:
if (supportsMinMax)
return EXTBlendMinmax.GL_MAX_EXT;
else
return ARBImaging.GL_FUNC_ADD;
case Subtract:
if (supportsSubtract)
return EXTBlendSubtract.GL_FUNC_SUBTRACT_EXT;
// FALLS THROUGH
case ReverseSubtract:
if (supportsSubtract)
return EXTBlendSubtract.GL_FUNC_REVERSE_SUBTRACT_EXT;
// FALLS THROUGH
case Add:
return ARBImaging.GL_FUNC_ADD;
}
throw new IllegalArgumentException("Invalid blend equation: " + eq);
}
private void applyTest(boolean enabled, BlendStateRecord record) {
if (record.isValid()) {
if (enabled) {
if (!record.testEnabled) {
GL11.glEnable(GL11.GL_ALPHA_TEST);
record.testEnabled = true;
}
int glFunc = getGLFuncValue(getTestFunction());
if (record.alphaFunc != glFunc
|| record.alphaRef != getReference()) {
GL11.glAlphaFunc(glFunc, getReference());
record.alphaFunc = glFunc;
record.alphaRef = getReference();
}
} else if (record.testEnabled) {
GL11.glDisable(GL11.GL_ALPHA_TEST);
record.testEnabled = false;
}
} else {
if (enabled) {
GL11.glEnable(GL11.GL_ALPHA_TEST);
record.testEnabled = true;
int glFunc = getGLFuncValue(getTestFunction());
GL11.glAlphaFunc(glFunc, getReference());
record.alphaFunc = glFunc;
record.alphaRef = getReference();
} else {
GL11.glDisable(GL11.GL_ALPHA_TEST);
record.testEnabled = false;
}
}
}
private int getGLFuncValue(TestFunction function) {
switch (function) {
case Never:
return GL11.GL_NEVER;
case LessThan:
return GL11.GL_LESS;
case EqualTo:
return GL11.GL_EQUAL;
case LessThanOrEqualTo:
return GL11.GL_LEQUAL;
case GreaterThan:
return GL11.GL_GREATER;
case NotEqualTo:
return GL11.GL_NOTEQUAL;
case GreaterThanOrEqualTo:
return GL11.GL_GEQUAL;
case Always:
return GL11.GL_ALWAYS;
}
throw new IllegalArgumentException("Invalid test function type: "
+ function);
}
@Override
public BlendStateRecord createStateRecord() {
return new BlendStateRecord();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?