package com.nilunder.bdx.gl; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.g3d.Attributes; import com.badlogic.gdx.graphics.g3d.Renderable; import com.badlogic.gdx.graphics.g3d.Shader; import com.badlogic.gdx.graphics.g3d.shaders.DepthShader; import com.badlogic.gdx.graphics.g3d.utils.DepthShaderProvider; import com.nilunder.bdx.Scene; class BDXDepthShader extends DepthShader { public Scene scene; public BDXDepthShader(Renderable renderable) { super(renderable, new DepthShader.Config()); } public BDXDepthShader(Renderable renderable, Config config) { super(renderable, config); } public void render(Renderable renderable, Attributes combinedAttributes) { if (scene != null) { // The uniforms need to be set before rendering, haha, whoops program.setUniformf("far", scene.camera.far()); program.setUniformf("near", scene.camera.near()); } super.render(renderable, combinedAttributes); } } public class BDXDepthShaderProvider extends DepthShaderProvider { public BDXDepthShaderProvider(FileHandle vertexShader, FileHandle fragmentShader) { super(vertexShader.readString(), fragmentShader.readString()); } protected Shader createShader(Renderable renderable) { return new BDXDepthShader(renderable, this.config); } public void update(Scene scene){ for (Shader s : shaders) { ((BDXDepthShader) s).scene = scene; } } }