@Override
  public void applyParameters(ShaderProgram program) {
    super.applyParameters(program);

    DefaultRenderingProcess.FBO sceneOpaque =
        DefaultRenderingProcess.getInstance().getFBO("sceneOpaque");

    int texId = 0;
    GL13.glActiveTexture(GL13.GL_TEXTURE0 + texId);
    sceneOpaque.bindTexture();
    program.setInt("texSceneOpaque", texId++);

    GL13.glActiveTexture(GL13.GL_TEXTURE0 + texId);
    sceneOpaque.bindDepthTexture();
    program.setInt("texSceneOpaqueDepth", texId++);

    GL13.glActiveTexture(GL13.GL_TEXTURE0 + texId);
    sceneOpaque.bindNormalsTexture();
    program.setInt("texSceneOpaqueNormals", texId++);

    DefaultRenderingProcess.FBO sceneTransparent =
        DefaultRenderingProcess.getInstance().getFBO("sceneTransparent");

    GL13.glActiveTexture(GL13.GL_TEXTURE0 + texId);
    sceneTransparent.bindTexture();
    program.setInt("texSceneTransparent", texId++);

    GL13.glActiveTexture(GL13.GL_TEXTURE0 + texId);
    sceneTransparent.bindDepthTexture();
    program.setInt("texSceneTransparentDepth", texId++);

    GL13.glActiveTexture(GL13.GL_TEXTURE0 + texId);
    sceneTransparent.bindNormalsTexture();
    program.setInt("texSceneTransparentNormals", texId++);

    if (CoreRegistry.get(Config.class).getRendering().isSsao()) {
      DefaultRenderingProcess.FBO ssao =
          DefaultRenderingProcess.getInstance().getFBO("ssaoBlurred1");
      GL13.glActiveTexture(GL13.GL_TEXTURE0 + texId);
      ssao.bindTexture();
      program.setInt("texSsao", texId++);
    }

    if (CoreRegistry.get(Config.class).getRendering().isOutline()) {
      DefaultRenderingProcess.FBO sobel = DefaultRenderingProcess.getInstance().getFBO("sobel");
      GL13.glActiveTexture(GL13.GL_TEXTURE0 + texId);
      sobel.bindTexture();
      program.setInt("texEdges", texId++);

      program.setFloat("outlineDepthThreshold", (Float) outlineDepthThreshold.getValue());
      program.setFloat("outlineThickness", (Float) outlineThickness.getValue());
    }

    program.setFloat("shoreStart", (Float) shoreStart.getValue());
    program.setFloat("shoreEnd", (Float) shoreEnd.getValue());
  }
  public void applyParameters(ShaderProgram program) {
    LocalPlayer localPlayer = CoreRegistry.get(LocalPlayer.class);

    GL13.glActiveTexture(GL13.GL_TEXTURE0);
    glBindTexture(GL11.GL_TEXTURE_2D, terrainTex.getId());

    if (localPlayer != null) program.setInt("carryingTorch", localPlayer.isCarryingTorch() ? 1 : 0);
  }