Example usage for org.lwjgl.opengl ARBTextureEnvCombine GL_COMBINE_RGB_ARB

List of usage examples for org.lwjgl.opengl ARBTextureEnvCombine GL_COMBINE_RGB_ARB

Introduction

In this page you can find the example usage for org.lwjgl.opengl ARBTextureEnvCombine GL_COMBINE_RGB_ARB.

Prototype

int GL_COMBINE_RGB_ARB

To view the source code for org.lwjgl.opengl ARBTextureEnvCombine GL_COMBINE_RGB_ARB.

Click Source Link

Document

Accepted by the pname parameter of TexEnvf, TexEnvi, TexEnvfv, and TexEnviv when the target parameter value is TEXTURE_ENV.

Usage

From source file:com.ardor3d.scene.state.lwjgl.LwjglTextureStateUtil.java

License:Open Source License

public static void applyCombineFactors(final Texture texture, final TextureUnitRecord unitRecord,
        final int unit, final TextureStateRecord record, final ContextCapabilities caps) {
    // check that this is a valid fixed function unit. glTexEnv is only
    // supported for unit < GL_MAX_TEXTURE_UNITS
    if (unit >= caps.getNumberOfFixedTextureUnits()) {
        return;//from   w ww .  jav a2s  .  c o m
    }

    // first thing's first... if we are doing dot3 and don't
    // support it, disable this texture.
    boolean checked = false;
    if (!caps.isEnvDot3TextureCombineSupported() && (texture.getCombineFuncRGB() == CombinerFunctionRGB.Dot3RGB
            || texture.getCombineFuncRGB() == CombinerFunctionRGB.Dot3RGBA)) {

        // disable
        disableTexturing(unitRecord, record, unit, caps);

        // No need to continue
        return;
    }

    // Okay, now let's set our scales if we need to:
    // First RGB Combine scale
    if (!unitRecord.isValid() || unitRecord.envRGBScale != texture.getCombineScaleRGB()) {
        if (!checked) {
            checkAndSetUnit(unit, record, caps);
            checked = true;
        }
        GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_RGB_SCALE_ARB,
                texture.getCombineScaleRGB().floatValue());
        unitRecord.envRGBScale = texture.getCombineScaleRGB();
    }
    // Then Alpha Combine scale
    if (!unitRecord.isValid() || unitRecord.envAlphaScale != texture.getCombineScaleAlpha()) {
        if (!checked) {
            checkAndSetUnit(unit, record, caps);
            checked = true;
        }
        GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_ALPHA_SCALE, texture.getCombineScaleAlpha().floatValue());
        unitRecord.envAlphaScale = texture.getCombineScaleAlpha();
    }

    // Time to set the RGB combines
    final CombinerFunctionRGB rgbCombineFunc = texture.getCombineFuncRGB();
    if (!unitRecord.isValid() || unitRecord.rgbCombineFunc != rgbCombineFunc) {
        if (!checked) {
            checkAndSetUnit(unit, record, caps);
            checked = true;
        }
        GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_COMBINE_RGB_ARB,
                LwjglTextureUtil.getGLCombineFuncRGB(rgbCombineFunc));
        unitRecord.rgbCombineFunc = rgbCombineFunc;
    }

    CombinerSource combSrcRGB = texture.getCombineSrc0RGB();
    if (!unitRecord.isValid() || unitRecord.combSrcRGB0 != combSrcRGB) {
        if (!checked) {
            checkAndSetUnit(unit, record, caps);
            checked = true;
        }
        GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_SOURCE0_RGB_ARB,
                LwjglTextureUtil.getGLCombineSrc(combSrcRGB));
        unitRecord.combSrcRGB0 = combSrcRGB;
    }

    CombinerOperandRGB combOpRGB = texture.getCombineOp0RGB();
    if (!unitRecord.isValid() || unitRecord.combOpRGB0 != combOpRGB) {
        if (!checked) {
            checkAndSetUnit(unit, record, caps);
            checked = true;
        }
        GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_OPERAND0_RGB_ARB,
                LwjglTextureUtil.getGLCombineOpRGB(combOpRGB));
        unitRecord.combOpRGB0 = combOpRGB;
    }

    // We only need to do Arg1 or Arg2 if we aren't in Replace mode
    if (rgbCombineFunc != CombinerFunctionRGB.Replace) {

        combSrcRGB = texture.getCombineSrc1RGB();
        if (!unitRecord.isValid() || unitRecord.combSrcRGB1 != combSrcRGB) {
            if (!checked) {
                checkAndSetUnit(unit, record, caps);
                checked = true;
            }
            GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_SOURCE1_RGB_ARB,
                    LwjglTextureUtil.getGLCombineSrc(combSrcRGB));
            unitRecord.combSrcRGB1 = combSrcRGB;
        }

        combOpRGB = texture.getCombineOp1RGB();
        if (!unitRecord.isValid() || unitRecord.combOpRGB1 != combOpRGB) {
            if (!checked) {
                checkAndSetUnit(unit, record, caps);
                checked = true;
            }
            GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_OPERAND1_RGB_ARB,
                    LwjglTextureUtil.getGLCombineOpRGB(combOpRGB));
            unitRecord.combOpRGB1 = combOpRGB;
        }

        // We only need to do Arg2 if we are in Interpolate mode
        if (rgbCombineFunc == CombinerFunctionRGB.Interpolate) {

            combSrcRGB = texture.getCombineSrc2RGB();
            if (!unitRecord.isValid() || unitRecord.combSrcRGB2 != combSrcRGB) {
                if (!checked) {
                    checkAndSetUnit(unit, record, caps);
                    checked = true;
                }
                GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_SOURCE2_RGB_ARB,
                        LwjglTextureUtil.getGLCombineSrc(combSrcRGB));
                unitRecord.combSrcRGB2 = combSrcRGB;
            }

            combOpRGB = texture.getCombineOp2RGB();
            if (!unitRecord.isValid() || unitRecord.combOpRGB2 != combOpRGB) {
                if (!checked) {
                    checkAndSetUnit(unit, record, caps);
                    checked = true;
                }
                GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_OPERAND2_RGB_ARB,
                        LwjglTextureUtil.getGLCombineOpRGB(combOpRGB));
                unitRecord.combOpRGB2 = combOpRGB;
            }

        }
    }

    // Now Alpha combines
    final CombinerFunctionAlpha alphaCombineFunc = texture.getCombineFuncAlpha();
    if (!unitRecord.isValid() || unitRecord.alphaCombineFunc != alphaCombineFunc) {
        if (!checked) {
            checkAndSetUnit(unit, record, caps);
            checked = true;
        }
        GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_COMBINE_ALPHA_ARB,
                LwjglTextureUtil.getGLCombineFuncAlpha(alphaCombineFunc));
        unitRecord.alphaCombineFunc = alphaCombineFunc;
    }

    CombinerSource combSrcAlpha = texture.getCombineSrc0Alpha();
    if (!unitRecord.isValid() || unitRecord.combSrcAlpha0 != combSrcAlpha) {
        if (!checked) {
            checkAndSetUnit(unit, record, caps);
            checked = true;
        }
        GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_SOURCE0_ALPHA_ARB,
                LwjglTextureUtil.getGLCombineSrc(combSrcAlpha));
        unitRecord.combSrcAlpha0 = combSrcAlpha;
    }

    CombinerOperandAlpha combOpAlpha = texture.getCombineOp0Alpha();
    if (!unitRecord.isValid() || unitRecord.combOpAlpha0 != combOpAlpha) {
        if (!checked) {
            checkAndSetUnit(unit, record, caps);
            checked = true;
        }
        GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_OPERAND0_ALPHA_ARB,
                LwjglTextureUtil.getGLCombineOpAlpha(combOpAlpha));
        unitRecord.combOpAlpha0 = combOpAlpha;
    }

    // We only need to do Arg1 or Arg2 if we aren't in Replace mode
    if (alphaCombineFunc != CombinerFunctionAlpha.Replace) {

        combSrcAlpha = texture.getCombineSrc1Alpha();
        if (!unitRecord.isValid() || unitRecord.combSrcAlpha1 != combSrcAlpha) {
            if (!checked) {
                checkAndSetUnit(unit, record, caps);
                checked = true;
            }
            GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_SOURCE1_ALPHA_ARB,
                    LwjglTextureUtil.getGLCombineSrc(combSrcAlpha));
            unitRecord.combSrcAlpha1 = combSrcAlpha;
        }

        combOpAlpha = texture.getCombineOp1Alpha();
        if (!unitRecord.isValid() || unitRecord.combOpAlpha1 != combOpAlpha) {
            if (!checked) {
                checkAndSetUnit(unit, record, caps);
                checked = true;
            }
            GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_OPERAND1_ALPHA_ARB,
                    LwjglTextureUtil.getGLCombineOpAlpha(combOpAlpha));
            unitRecord.combOpAlpha1 = combOpAlpha;
        }

        // We only need to do Arg2 if we are in Interpolate mode
        if (alphaCombineFunc == CombinerFunctionAlpha.Interpolate) {

            combSrcAlpha = texture.getCombineSrc2Alpha();
            if (!unitRecord.isValid() || unitRecord.combSrcAlpha2 != combSrcAlpha) {
                if (!checked) {
                    checkAndSetUnit(unit, record, caps);
                    checked = true;
                }
                GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_SOURCE2_ALPHA_ARB,
                        LwjglTextureUtil.getGLCombineSrc(combSrcAlpha));
                unitRecord.combSrcAlpha2 = combSrcAlpha;
            }

            combOpAlpha = texture.getCombineOp2Alpha();
            if (!unitRecord.isValid() || unitRecord.combOpAlpha2 != combOpAlpha) {
                if (!checked) {
                    checkAndSetUnit(unit, record, caps);
                    checked = true;
                }
                GL11.glTexEnvi(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_OPERAND2_ALPHA_ARB,
                        LwjglTextureUtil.getGLCombineOpAlpha(combOpAlpha));
                unitRecord.combOpAlpha2 = combOpAlpha;
            }
        }
    }
}

From source file:espresso3d.engine.renderer.E3DGeometryRenderer.java

License:Open Source License

/*********************************/

public void setupTextureUnits(int glTextureID, int detail0TextureID, int detail1TextureID) {
    ARBMultitexture.glActiveTextureARB(ARBMultitexture.GL_TEXTURE0_ARB);
    if (glTextureID != -1) {
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D, glTextureID);
        /*            if(detail0TextureID != -1)
                    {// w  w w.ja va 2  s  .  c om
        GL11.glTexEnvf (GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, ARBTextureEnvCombine.GL_COMBINE_ARB);
        GL11.glTexEnvf (GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_COMBINE_RGB_ARB, GL11.GL_REPLACE);
                    }
                    else
                    {*/
        GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, GL11.GL_MODULATE);
        //            }
    } else
        GL11.glDisable(GL11.GL_TEXTURE_2D);

    if (getEngine().getFeatureChecker().getArbMultitextureNumTexUnitsSupported() < 2)
        return;
    ARBMultitexture.glActiveTextureARB(ARBMultitexture.GL_TEXTURE1_ARB);
    if (detail0TextureID != -1) {
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D, detail0TextureID);
        GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, ARBTextureEnvCombine.GL_COMBINE_ARB);
        GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_COMBINE_RGB_ARB, GL11.GL_ADD);
    } else
        GL11.glDisable(GL11.GL_TEXTURE_2D);

    if (getEngine().getFeatureChecker().getArbMultitextureNumTexUnitsSupported() < 3)
        return;
    ARBMultitexture.glActiveTextureARB(ARBMultitexture.GL_TEXTURE2_ARB);
    if (detail1TextureID != -1) {
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glBindTexture(GL11.GL_TEXTURE_2D, detail1TextureID);
        GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, GL11.GL_TEXTURE_ENV_MODE, ARBTextureEnvCombine.GL_COMBINE_ARB);
        GL11.glTexEnvf(GL11.GL_TEXTURE_ENV, ARBTextureEnvCombine.GL_COMBINE_RGB_ARB, GL11.GL_ADD);
    } else
        GL11.glDisable(GL11.GL_TEXTURE_2D);
}