    001package net.minecraft.client.renderer;
    002
    003import cpw.mods.fml.relauncher.Side;
    004import cpw.mods.fml.relauncher.SideOnly;
    005import java.nio.FloatBuffer;
    006import net.minecraft.util.Vec3;
    007import org.lwjgl.opengl.GL11;
    008
    009@SideOnly(Side.CLIENT)
    010public class RenderHelper
    011{
    012    /** Float buffer used to set OpenGL material colors */
    013    private static FloatBuffer colorBuffer = GLAllocation.createDirectFloatBuffer(16);
    014    private static final Vec3 field_82884_b = Vec3.createVectorHelper(0.20000000298023224D, 1.0D, -0.699999988079071D).normalize();
    015    private static final Vec3 field_82885_c = Vec3.createVectorHelper(-0.20000000298023224D, 1.0D, 0.699999988079071D).normalize();
    016
    017    /**
    018     * Disables the OpenGL lighting properties enabled by enableStandardItemLighting
    019     */
    020    public static void disableStandardItemLighting()
    021    {
    022        GL11.glDisable(GL11.GL_LIGHTING);
    023        GL11.glDisable(GL11.GL_LIGHT0);
    024        GL11.glDisable(GL11.GL_LIGHT1);
    025        GL11.glDisable(GL11.GL_COLOR_MATERIAL);
    026    }
    027
    028    /**
    029     * Sets the OpenGL lighting properties to the values used when rendering blocks as items
    030     */
    031    public static void enableStandardItemLighting()
    032    {
    033        GL11.glEnable(GL11.GL_LIGHTING);
    034        GL11.glEnable(GL11.GL_LIGHT0);
    035        GL11.glEnable(GL11.GL_LIGHT1);
    036        GL11.glEnable(GL11.GL_COLOR_MATERIAL);
    037        GL11.glColorMaterial(GL11.GL_FRONT_AND_BACK, GL11.GL_AMBIENT_AND_DIFFUSE);
    038        float f = 0.4F;
    039        float f1 = 0.6F;
    040        float f2 = 0.0F;
    041        GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, setColorBuffer(field_82884_b.xCoord, field_82884_b.yCoord, field_82884_b.zCoord, 0.0D));
    042        GL11.glLight(GL11.GL_LIGHT0, GL11.GL_DIFFUSE, setColorBuffer(f1, f1, f1, 1.0F));
    043        GL11.glLight(GL11.GL_LIGHT0, GL11.GL_AMBIENT, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F));
    044        GL11.glLight(GL11.GL_LIGHT0, GL11.GL_SPECULAR, setColorBuffer(f2, f2, f2, 1.0F));
    045        GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION, setColorBuffer(field_82885_c.xCoord, field_82885_c.yCoord, field_82885_c.zCoord, 0.0D));
    046        GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, setColorBuffer(f1, f1, f1, 1.0F));
    047        GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F));
    048        GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPECULAR, setColorBuffer(f2, f2, f2, 1.0F));
    049        GL11.glShadeModel(GL11.GL_FLAT);
    050        GL11.glLightModel(GL11.GL_LIGHT_MODEL_AMBIENT, setColorBuffer(f, f, f, 1.0F));
    051    }
    052
    053    /**
    054     * Update and return colorBuffer with the RGBA values passed as arguments
    055     */
    056    private static FloatBuffer setColorBuffer(double par0, double par2, double par4, double par6)
    057    {
    058        return setColorBuffer((float)par0, (float)par2, (float)par4, (float)par6);
    059    }
    060
    061    /**
    062     * Update and return colorBuffer with the RGBA values passed as arguments
    063     */
    064    private static FloatBuffer setColorBuffer(float par0, float par1, float par2, float par3)
    065    {
    066        colorBuffer.clear();
    067        colorBuffer.put(par0).put(par1).put(par2).put(par3);
    068        colorBuffer.flip();
    069        return colorBuffer;
    070    }
    071
    072    /**
    073     * Sets OpenGL lighting for rendering blocks as items inside GUI screens (such as containers).
    074     */
    075    public static void enableGUIStandardItemLighting()
    076    {
    077        GL11.glPushMatrix();
    078        GL11.glRotatef(-30.0F, 0.0F, 1.0F, 0.0F);
    079        GL11.glRotatef(165.0F, 1.0F, 0.0F, 0.0F);
    080        enableStandardItemLighting();
    081        GL11.glPopMatrix();
    082    }
    083}