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    /**
030     * Initializes the texture constants to be used when rendering lightmap values
031     */
032    public static void initializeTextures()
033    {
034        useMultitextureARB = GLContext.getCapabilities().GL_ARB_multitexture && !GLContext.getCapabilities().OpenGL13;
035
036        if (useMultitextureARB)
037        {
038            defaultTexUnit = 33984;
039            lightmapTexUnit = 33985;
040        }
041        else
042        {
043            defaultTexUnit = 33984;
044            lightmapTexUnit = 33985;
045        }
046    }
047
048    /**
049     * Sets the current lightmap texture to the specified OpenGL constant
050     */
051    public static void setActiveTexture(int par0)
052    {
053        if (useMultitextureARB)
054        {
055            ARBMultitexture.glActiveTextureARB(par0);
056        }
057        else
058        {
059            GL13.glActiveTexture(par0);
060        }
061    }
062
063    /**
064     * Sets the current lightmap texture to the specified OpenGL constant
065     */
066    public static void setClientActiveTexture(int par0)
067    {
068        if (useMultitextureARB)
069        {
070            ARBMultitexture.glClientActiveTextureARB(par0);
071        }
072        else
073        {
074            GL13.glClientActiveTexture(par0);
075        }
076    }
077
078    /**
079     * Sets the current coordinates of the given lightmap texture
080     */
081    public static void setLightmapTextureCoords(int par0, float par1, float par2)
082    {
083        if (useMultitextureARB)
084        {
085            ARBMultitexture.glMultiTexCoord2fARB(par0, par1, par2);
086        }
087        else
088        {
089            GL13.glMultiTexCoord2f(par0, par1, par2);
090        }
091    }
092}