Messing with shader.

This commit is contained in:
Christian Knaapen
2019-02-06 19:56:37 +01:00
parent 7321d1af01
commit e67849dd0b
4 changed files with 102 additions and 44 deletions

View File

@@ -1,17 +1,13 @@
package nl.requios.effortlessbuilding.helper;
import net.minecraft.block.Block;
import net.minecraft.block.BlockDirt;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.*;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
@@ -48,7 +44,6 @@ import org.lwjgl.util.Color;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.function.Consumer;
@@ -307,7 +302,9 @@ public class RenderHelper implements IWorldEventListener {
SurvivalHelper.mayPlace(player.world, Block.getBlockFromItem(itemstack.getItem()), blockState, blockPos, true, EnumFacing.UP, player) &&
SurvivalHelper.canReplace(player.world, player, blockPos)) {
ShaderHelper.useShader(ShaderHelper.psiBar, generateCallback(percentile, new Vec3d(blockPos), /*blockPos == firstPos ||*/ blockPos == secondPos));
ShaderHelper.useShader(ShaderHelper.dissolve, generateShaderCallback(percentile,
new Vec3d(blockPos), new Vec3d(firstPos), new Vec3d(secondPos),
/*blockPos == firstPos ||*/ blockPos == secondPos));
renderBlockPreview(dispatcher, blockPos, blockState);
}
}
@@ -428,12 +425,14 @@ public class RenderHelper implements IWorldEventListener {
tessellator.draw();
}
private static Consumer<Integer> generateCallback(final float percentile, final Vec3d blockpos, final boolean highlight) {
private static Consumer<Integer> generateShaderCallback(final float percentile, final Vec3d blockpos, final Vec3d firstpos, final Vec3d secondpos, final boolean highlight) {
Minecraft mc = Minecraft.getMinecraft();
return (Integer shader) -> {
int percentileUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "percentile");
int highlightUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "highlight");
int blockposUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "blockpos");
int firstposUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "firstpos");
int secondposUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "secondpos");
int imageUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "image");
int maskUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "mask");
@@ -454,6 +453,8 @@ public class RenderHelper implements IWorldEventListener {
//blockpos
ARBShaderObjects.glUniform3fARB(blockposUniform, (float) blockpos.x, (float) blockpos.y, (float) blockpos.z);
ARBShaderObjects.glUniform3fARB(firstposUniform, (float) firstpos.x, (float) firstpos.y, (float) firstpos.z);
ARBShaderObjects.glUniform3fARB(secondposUniform, (float) secondpos.x, (float) secondpos.y, (float) secondpos.z);
//percentile
ARBShaderObjects.glUniform1fARB(percentileUniform, percentile);

View File

@@ -12,19 +12,21 @@
*/
package nl.requios.effortlessbuilding.helper;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GLAllocation;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper;
import nl.requios.effortlessbuilding.BuildConfig;
import nl.requios.effortlessbuilding.EffortlessBuilding;
import nl.requios.effortlessbuilding.proxy.ClientProxy;
import org.apache.logging.log4j.Level;
import org.lwjgl.opengl.ARBFragmentShader;
import org.lwjgl.opengl.ARBShaderObjects;
import org.lwjgl.opengl.ARBVertexShader;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.*;
import org.lwjgl.util.vector.Matrix4f;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.FloatBuffer;
import java.nio.charset.StandardCharsets;
import java.util.function.Consumer;
@@ -39,15 +41,18 @@ public final class ShaderHelper {
private static final String VERT_EXTENSION = ".vert";
private static final String FRAG_EXTENSION = ".frag";
// public static final FloatBuffer projection = GLAllocation.createDirectFloatBuffer(16);
// public static final FloatBuffer modelview = GLAllocation.createDirectFloatBuffer(16);
public static int rawColor;
public static int psiBar;
public static int dissolve;
public static void init() {
if(!doUseShaders())
return;
rawColor = createProgram("/assets/effortlessbuilding/shaders/raw_color", FRAG);
psiBar = createProgram("/assets/effortlessbuilding/shaders/dissolve", FRAG);
dissolve = createProgram("/assets/effortlessbuilding/shaders/dissolve", FRAG);
}
public static void useShader(int shader, Consumer<Integer> callback) {
@@ -60,6 +65,17 @@ public final class ShaderHelper {
int time = ARBShaderObjects.glGetUniformLocationARB(shader, "time");
ARBShaderObjects.glUniform1iARB(time, ClientProxy.ticksInGame);
// GlStateManager.getFloat(GL11.GL_PROJECTION_MATRIX, projection);
// GlStateManager.getFloat(GL11.GL_MODELVIEW_MATRIX, modelview);
// int inverse_view_proj = ARBShaderObjects.glGetUniformLocationARB(shader, "inverse_view_proj");
int screen_width = ARBShaderObjects.glGetUniformLocationARB(shader, "screen_width");
int screen_height = ARBShaderObjects.glGetUniformLocationARB(shader, "screen_height");
// ARBShaderObjects.glUniformMatrix4ARB(inverse_view_proj, true, modelview);
ARBShaderObjects.glUniform1fARB(screen_width, Minecraft.getMinecraft().displayWidth);
ARBShaderObjects.glUniform1fARB(screen_height, Minecraft.getMinecraft().displayHeight);
if(callback != null)
callback.accept(shader);
}