/**
* This class was created by <Adubbz>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [? (GMT)]
*/
package vazkii.botania.client.render.entity;
import javax.annotation.Nonnull;
import org.lwjgl.opengl.ARBShaderObjects;
import org.lwjgl.opengl.GL11;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.util.ResourceLocation;
import vazkii.botania.api.internal.ShaderCallback;
import vazkii.botania.client.core.helper.ShaderHelper;
import vazkii.botania.client.lib.LibResources;
import vazkii.botania.client.model.ModelPixie;
import vazkii.botania.common.entity.EntityPixie;
public class RenderPixie extends RenderLiving<EntityPixie> {
final ShaderCallback callback = shader -> {
// Frag Uniforms
int disfigurationUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "disfiguration");
ARBShaderObjects.glUniform1fARB(disfigurationUniform, 0.025F);
// Vert Uniforms
int grainIntensityUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "grainIntensity");
ARBShaderObjects.glUniform1fARB(grainIntensityUniform, 0.05F);
};
public RenderPixie(RenderManager renderManager) {
super(renderManager, new ModelPixie(), 0.25F);
//setRenderPassModel(new ModelPixie());
shadowSize = 0.0F;
}
@Nonnull
@Override
protected ResourceLocation getEntityTexture(@Nonnull EntityPixie entity) {
return new ResourceLocation(LibResources.MODEL_PIXIE);
}
@Override
public void doRender(@Nonnull EntityPixie pixie, double par2, double par4, double par6, float par8, float par9) {
if(pixie.getType() == 1)
ShaderHelper.useShader(ShaderHelper.doppleganger, callback);
super.doRender(pixie, par2, par4, par6, par8, par9);
if(pixie.getType() == 1)
ShaderHelper.releaseShader();
}
protected int setPixieBrightness(EntityPixie par1EntityPixie, int par2, float par3) {
if (par2 != 0)
return -1;
else {
bindTexture(getEntityTexture(par1EntityPixie));
float f1 = 1.0F;
GlStateManager.enableBlend();
GlStateManager.disableAlpha();
GlStateManager.blendFunc(GL11.GL_ONE, GL11.GL_ONE);
if (par1EntityPixie.isInvisible())
GlStateManager.depthMask(false);
else
GlStateManager.depthMask(true);
char c0 = 61680;
int j = c0 % 65536;
int k = c0 / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, j / 1.0F, k / 1.0F);
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.color(1.0F, 1.0F, 1.0F, f1);
return 1;
}
}
/*@Override
protected int shouldRenderPass(EntityLivingBase par1EntityLivingBase, int par2, float par3) {
return setPixieBrightness((EntityPixie)par1EntityLivingBase, par2, par3);
}*/
}