@SubscribeEvent
public void godRays(RenderWorldLastEvent event) {
int current = GL11.glGetInteger(GL11.GL_TEXTURE_BINDING_2D); // в 1.12 нужно сохранять текстур атлас
if (framebuffer == null)
framebuffer = new Framebuffer(mc.displayWidth, mc.displayHeight, true);
if (mc.displayWidth != framebuffer.framebufferWidth
|| mc.displayHeight != framebuffer.framebufferHeight)
framebuffer.createBindFramebuffer(mc.displayWidth, mc.displayHeight);
if (framebufferSub == null)
framebufferSub = new Framebuffer(mc.displayWidth, mc.displayHeight, false);
if (mc.displayWidth != framebufferSub.framebufferWidth
|| mc.displayHeight != framebufferSub.framebufferHeight)
framebufferSub.createBindFramebuffer(mc.displayWidth, mc.displayHeight);
framebuffer.bindFramebuffer(false);
GL30.glBindFramebuffer(GL30.GL_READ_FRAMEBUFFER, mc.getFramebuffer().framebufferObject);
GL30.glBlitFramebuffer(0, 0,
mc.displayWidth, mc.displayHeight,
0, 0,
mc.displayWidth, mc.displayHeight,
GL11.GL_DEPTH_BUFFER_BIT,
GL11.GL_NEAREST);
//Sun position
GL11.glPushMatrix();
//GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0);
//GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
WorldClient world = Minecraft.getMinecraft().world;
float f17 = 1.0f - world.getRainStrength(event.getPartialTicks());
float br = world.getSunBrightness(event.getPartialTicks()) + 0.1f;
GL11.glColor4f(1f * br, 1f * br, 1f* br, f17); //brightness
//GL11.glColor3f(0,0,0); //color
GL11.glRotatef(-90f, 0, 1, 0);
GL11.glRotatef(world.getCelestialAngle(event.getPartialTicks())*360, 1, 0, 0);
GL11.glTranslatef(0, 0, 0.01f);
drawSun();
GL11.glPopMatrix();
framebufferSub.bindFramebuffer(false);
ShaderRegister.FILTER.start();
ShaderRegister.FILTER.uniform();
GL11.glPushMatrix();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.getFramebuffer().framebufferTexture);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
drawQuad();
GL11.glPopMatrix();
ShaderRegister.FILTER.stop();
GL11.glPushMatrix();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, framebuffer.framebufferTexture);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
drawQuad();
GL11.glPopMatrix();
GL13.glActiveTexture(GL13.GL_TEXTURE3);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, mc.getFramebuffer().framebufferTexture);
GL13.glActiveTexture(GL13.GL_TEXTURE0);
mc.getFramebuffer().bindFramebuffer(false);
ShaderRegister.RBLUR.start();
ShaderRegister.RBLUR.textureUnits(world.getCelestialAngle(event.getPartialTicks()));
GL11.glPushMatrix();
GL11.glBindTexture(GL11.GL_TEXTURE_2D, framebufferSub.framebufferTexture);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
drawQuad();
GL11.glPopMatrix();
ShaderRegister.RBLUR.stop();
framebuffer.framebufferClear();
framebufferSub.framebufferClear();
mc.getFramebuffer().bindFramebuffer(false);
GL11.glBindTexture(GL11.GL_TEXTURE_2D, current);
//После чего рисую допустим квадрат 1х1
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder buffer = tessellator.getBuffer();
buffer.begin(7, DefaultVertexFormats.POSITION_TEX);
buffer.pos(-1, -1, 0).tex(0, 0).endVertex();
buffer.pos(1, -1, 0).tex(1, 0).endVertex();
buffer.pos(1, 1, 0).tex(1, 1).endVertex();
buffer.pos(-1, 1, 0).tex(0, 1).endVertex();
}