    001package net.minecraft.client.renderer;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import org.lwjgl.opengl.ARBMultitexture;
    006import org.lwjgl.opengl.GL13;
    007import org.lwjgl.opengl.GLContext;
    008
    009@SideOnly(Side.CLIENT)
    010public class OpenGlHelper
    011{
    012    /**
    013     * An OpenGL constant corresponding to GL_TEXTURE0, used when setting data pertaining to auxiliary OpenGL texture
    014     * units.
    015     */
    016    public static int defaultTexUnit;
    017
    018    /**
    019     * An OpenGL constant corresponding to GL_TEXTURE1, used when setting data pertaining to auxiliary OpenGL texture
    020     * units.
    021     */
    022    public static int lightmapTexUnit;
    023
    024    /**
    025     * True if the renderer supports multitextures and the OpenGL version != 1.3
    026     */
    027    private static boolean useMultitextureARB = false;
    028
    029    /* Stores the last values sent into setLightmapTextureCoords */
    030    public static float lastBrightnessX = 0.0f;
    031    public static float lastBrightnessY = 0.0f;
    032
    033    /**
    034     * Initializes the texture constants to be used when rendering lightmap values
    035     */
    036    public static void initializeTextures()
    037    {
    038        useMultitextureARB = GLContext.getCapabilities().GL_ARB_multitexture && !GLContext.getCapabilities().OpenGL13;
    039
    040        if (useMultitextureARB)
    041        {
    042            defaultTexUnit = 33984;
    043            lightmapTexUnit = 33985;
    044        }
    045        else
    046        {
    047            defaultTexUnit = 33984;
    048            lightmapTexUnit = 33985;
    049        }
    050    }
    051
    052    /**
    053     * Sets the current lightmap texture to the specified OpenGL constant
    054     */
    055    public static void setActiveTexture(int par0)
    056    {
    057        if (useMultitextureARB)
    058        {
    059            ARBMultitexture.glActiveTextureARB(par0);
    060        }
    061        else
    062        {
    063            GL13.glActiveTexture(par0);
    064        }
    065    }
    066
    067    /**
    068     * Sets the current lightmap texture to the specified OpenGL constant
    069     */
    070    public static void setClientActiveTexture(int par0)
    071    {
    072        if (useMultitextureARB)
    073        {
    074            ARBMultitexture.glClientActiveTextureARB(par0);
    075        }
    076        else
    077        {
    078            GL13.glClientActiveTexture(par0);
    079        }
    080    }
    081
    082    /**
    083     * Sets the current coordinates of the given lightmap texture
    084     */
    085    public static void setLightmapTextureCoords(int par0, float par1, float par2)
    086    {
    087        if (useMultitextureARB)
    088        {
    089            ARBMultitexture.glMultiTexCoord2fARB(par0, par1, par2);
    090        }
    091        else
    092        {
    093            GL13.glMultiTexCoord2f(par0, par1, par2);
    094        }
    095
    096        if (par0 == lightmapTexUnit)
    097        {
    098            lastBrightnessX = par1;
    099            lastBrightnessY = par2;
    100        }
    101    }
    102}