-
Автор темы
- #1
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Помогите плс спасить блюр а то я тупой не палучаеца
а вот как рендерица
вот что я напастил с exp 2.0 на 3.1 ошыбок нигде нету хз что делать
Java:
GaussianBlur.blur(2,2);
DisplayUtils.drawRoundedRect(x, y, width, height, radius, ColorUtils.rgba(5, 5, 15, 124));
GaussianBlur.startBlur();
вот что я напастил с exp 2.0 на 3.1 ошыбок нигде нету хз что делать
Java:
package im.expensive.utils.render;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import im.expensive.utils.shader.ShaderUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.shader.Framebuffer;
import org.lwjgl.BufferUtils;
import java.nio.FloatBuffer;
import static com.mojang.blaze3d.systems.RenderSystem.glUniform1;
import static im.expensive.utils.render.StencilUtil.mc;
public class GaussianBlur {
private static final ShaderUtil gaussianBlur = new ShaderUtil("blur");
private static Framebuffer framebuffer = new Framebuffer(1, 1, false, false);
private static void setupUniforms(float dir1, float dir2, float radius) {
gaussianBlur.setUniform("textureIn", 0);
gaussianBlur.setUniformf("texelSize", 1.0F / (float) mc.getMainWindow().getWidth(), 1.0F / (float) mc.getMainWindow().getHeight());
gaussianBlur.setUniformf("direction", dir1, dir2);
gaussianBlur.setUniformf("radius", radius);
final FloatBuffer weightBuffer = BufferUtils.createFloatBuffer(256);
for (int i = 0; i <= radius; i++) {
weightBuffer.put(calculateGaussianValue(i, radius / 2));
}
weightBuffer.rewind();
glUniform1(gaussianBlur.getUniform("weights"), weightBuffer);
}
public static void startBlur(){
StencilUtil.initStencilToWrite();
}
public static void endBlur(float radius, float compression) {
StencilUtil.readStencilBuffer(1);
framebuffer = ShaderUtil.createFrameBuffer(framebuffer);
framebuffer.framebufferClear(false);
framebuffer.bindFramebuffer(false);
gaussianBlur.attach();
setupUniforms(compression, 0, radius);
GlStateManager.bindTexture(mc.getFramebuffer().framebufferTexture);
ShaderUtil.drawQuads();
framebuffer.unbindFramebuffer();
gaussianBlur.detach();
mc.getFramebuffer().bindFramebuffer(false);
gaussianBlur.attach();
gaussianBlur.setUniformf("direction", 0, compression);
GlStateManager.bindTexture(framebuffer.framebufferTexture);
ShaderUtil.drawQuads();
gaussianBlur.detach();
StencilUtil.uninitStencilBuffer();
GlStateManager.color4f(-1,-1,1,-1);
GlStateManager.bindTexture(0);
}
public static void blur(float radius, float compression) {
framebuffer = ShaderUtil.createFrameBuffer(framebuffer);
framebuffer.framebufferClear(false);
framebuffer.bindFramebuffer(false);
gaussianBlur.attach();
setupUniforms(compression, 0, radius);
GlStateManager.bindTexture(mc.getFramebuffer().framebufferTexture);
ShaderUtil.drawQuads();
framebuffer.unbindFramebuffer();
gaussianBlur.detach();
mc.getFramebuffer().bindFramebuffer(false);
gaussianBlur.attach();
setupUniforms(0, compression, radius);
GlStateManager.bindTexture(framebuffer.framebufferTexture);
ShaderUtil.drawQuads();
gaussianBlur.detach();
GlStateManager.color4f(-1,-1,1,-1);
GlStateManager.bindTexture(0);
}
public static float calculateGaussianValue(float x, float sigma) {
double output = 1.0 / Math.sqrt(2.0 * Math.PI * (sigma * sigma));
return (float) (output * Math.exp(-(x * x) / (2.0 * (sigma * sigma))));
}
}
Java:
package im.expensive.utils.render;
import net.minecraft.client.Minecraft;
import net.minecraft.client.shader.Framebuffer;
import org.lwjgl.opengl.EXTFramebufferObject;
import org.lwjgl.opengl.EXTPackedDepthStencil;
import org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL11.*;
/**
* @author dedinside
* @since 24.06.2023
*/
public class StencilUtil {
static Minecraft mc = Minecraft.getInstance();
/*
* Given to me by igs
* */
public static void checkSetupFBO(Framebuffer framebuffer) {
if (framebuffer != null) {
if (framebuffer.depthBuffer > -1) {
setupFBO(framebuffer);
framebuffer.depthBuffer = -1;
}
}
}
/**
* @param framebuffer
* @implNote Sets up the Framebuffer for Stencil use
*/
public static void setupFBO(Framebuffer framebuffer) {
EXTFramebufferObject.glDeleteRenderbuffersEXT(framebuffer.depthBuffer);
final int stencilDepthBufferID = EXTFramebufferObject.glGenRenderbuffersEXT();
EXTFramebufferObject.glBindRenderbufferEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, stencilDepthBufferID);
EXTFramebufferObject.glRenderbufferStorageEXT(EXTFramebufferObject.GL_RENDERBUFFER_EXT, EXTPackedDepthStencil.GL_DEPTH_STENCIL_EXT, mc.getMainWindow().getWidth(), mc.getMainWindow().getHeight());
EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_STENCIL_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, stencilDepthBufferID);
EXTFramebufferObject.glFramebufferRenderbufferEXT(EXTFramebufferObject.GL_FRAMEBUFFER_EXT, EXTFramebufferObject.GL_DEPTH_ATTACHMENT_EXT, EXTFramebufferObject.GL_RENDERBUFFER_EXT, stencilDepthBufferID);
}
/**
* @implNote Initializes the Stencil Buffer to write to
*/
public static void initStencilToWrite() {
//init
mc.getFramebuffer().bindFramebuffer(false);
checkSetupFBO(mc.getFramebuffer());
glClear(GL_STENCIL_BUFFER_BIT);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
glColorMask(false, false, false, false);
}
/**
* @param ref (usually 1)
* @implNote Reads the Stencil Buffer and stencils it onto everything until
* @see StencilUtil#uninitStencilBuffer() is called
*/
public static void readStencilBuffer(int ref) {
glColorMask(true, true, true, true);
glStencilFunc(GL_EQUAL, ref, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
}
public static void uninitStencilBuffer() {
glDisable(GL_STENCIL_TEST);
}
}