Search in sources :

Example 1 with Shader

use of com.badlogic.gdx.graphics.g3d.Shader in project libgdx by libgdx.

the class BillboardParticleBatch method getShader.

private Shader getShader(Renderable renderable) {
    Shader shader = useGPU ? new ParticleShader(renderable, new ParticleShader.Config(mode)) : new DefaultShader(renderable);
    shader.init();
    return shader;
}
Also used : ParticleShader(com.badlogic.gdx.graphics.g3d.particles.ParticleShader) DefaultShader(com.badlogic.gdx.graphics.g3d.shaders.DefaultShader) Shader(com.badlogic.gdx.graphics.g3d.Shader) ParticleShader(com.badlogic.gdx.graphics.g3d.particles.ParticleShader) DefaultShader(com.badlogic.gdx.graphics.g3d.shaders.DefaultShader)

Example 2 with Shader

use of com.badlogic.gdx.graphics.g3d.Shader in project libgdx by libgdx.

the class MultipleRenderTargetTest method render.

@Override
public void render() {
    track += Gdx.graphics.getDeltaTime();
    Gdx.gl.glClearColor(0f, 0f, 0f, 1f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    cameraController.update(Gdx.graphics.getDeltaTime());
    renderContext.begin();
    frameBuffer.begin();
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
    renerablePool.flush();
    renderables.clear();
    modelCache.begin(camera);
    modelCache.add(cannon);
    modelCache.add(floorInstance);
    for (Light light : lights) {
        light.update(Gdx.graphics.getDeltaTime());
        modelCache.add(light.lightInstance);
    }
    modelCache.end();
    modelCache.getRenderables(renderables, renerablePool);
    for (Renderable renderable : renderables) {
        renderable.shader = shaderProvider.getShader(renderable);
    }
    renderableSorter.sort(camera, renderables);
    Shader currentShader = null;
    for (int i = 0; i < renderables.size; i++) {
        final Renderable renderable = renderables.get(i);
        if (currentShader != renderable.shader) {
            if (currentShader != null)
                currentShader.end();
            currentShader = renderable.shader;
            currentShader.begin(camera, renderContext);
        }
        currentShader.render(renderable);
    }
    if (currentShader != null)
        currentShader.end();
    frameBuffer.end();
    mrtSceneShader.begin();
    mrtSceneShader.setUniformi("u_diffuseTexture", renderContext.textureBinder.bind(frameBuffer.getColorBufferTexture(DIFFUSE_ATTACHMENT)));
    mrtSceneShader.setUniformi("u_normalTexture", renderContext.textureBinder.bind(frameBuffer.getColorBufferTexture(NORMAL_ATTACHMENT)));
    mrtSceneShader.setUniformi("u_positionTexture", renderContext.textureBinder.bind(frameBuffer.getColorBufferTexture(POSITION_ATTACHMENT)));
    mrtSceneShader.setUniformi("u_depthTexture", renderContext.textureBinder.bind(frameBuffer.getColorBufferTexture(DEPTH_ATTACHMENT)));
    for (int i = 0; i < lights.size; i++) {
        Light light = lights.get(i);
        mrtSceneShader.setUniformf("lights[" + i + "].lightPosition", light.position);
        mrtSceneShader.setUniformf("lights[" + i + "].lightColor", light.color);
    }
    mrtSceneShader.setUniformf("u_viewPos", camera.position);
    mrtSceneShader.setUniformMatrix("u_inverseProjectionMatrix", camera.invProjectionView);
    quad.render(mrtSceneShader, GL30.GL_TRIANGLE_FAN);
    mrtSceneShader.end();
    renderContext.end();
    batch.disableBlending();
    batch.begin();
    batch.draw(frameBuffer.getColorBufferTexture(DIFFUSE_ATTACHMENT), 0, 0, Gdx.graphics.getWidth() / 4f, Gdx.graphics.getHeight() / 4f, 0f, 0f, 1f, 1f);
    batch.draw(frameBuffer.getColorBufferTexture(NORMAL_ATTACHMENT), Gdx.graphics.getWidth() / 4f, 0, Gdx.graphics.getWidth() / 4f, Gdx.graphics.getHeight() / 4f, 0f, 0f, 1f, 1f);
    batch.draw(frameBuffer.getColorBufferTexture(POSITION_ATTACHMENT), 2 * Gdx.graphics.getWidth() / 4f, 0, Gdx.graphics.getWidth() / 4f, Gdx.graphics.getHeight() / 4f, 0f, 0f, 1f, 1f);
    batch.draw(frameBuffer.getColorBufferTexture(DEPTH_ATTACHMENT), 3 * Gdx.graphics.getWidth() / 4f, 0, Gdx.graphics.getWidth() / 4f, Gdx.graphics.getHeight() / 4f, 0f, 0f, 1f, 1f);
    batch.end();
}
Also used : Renderable(com.badlogic.gdx.graphics.g3d.Renderable) Shader(com.badlogic.gdx.graphics.g3d.Shader)

Example 3 with Shader

use of com.badlogic.gdx.graphics.g3d.Shader in project libgdx by libgdx.

the class Pass1ShaderProvider method getShader.

@Override
public Shader getShader(Renderable renderable) {
    for (Shader shader : shaders) {
        if (shader.canRender(renderable))
            return shader;
    }
    final Shader shader = createShader(renderable);
    shader.init();
    shaders.add(shader);
    return shader;
}
Also used : Shader(com.badlogic.gdx.graphics.g3d.Shader)

Example 4 with Shader

use of com.badlogic.gdx.graphics.g3d.Shader in project libgdx by libgdx.

the class BaseShaderProvider method getShader.

@Override
public Shader getShader(Renderable renderable) {
    Shader suggestedShader = renderable.shader;
    if (suggestedShader != null && suggestedShader.canRender(renderable))
        return suggestedShader;
    for (Shader shader : shaders) {
        if (shader.canRender(renderable))
            return shader;
    }
    final Shader shader = createShader(renderable);
    shader.init();
    shaders.add(shader);
    return shader;
}
Also used : Shader(com.badlogic.gdx.graphics.g3d.Shader)

Example 5 with Shader

use of com.badlogic.gdx.graphics.g3d.Shader in project libgdx by libgdx.

the class MultipleRenderTargetTest method create.

@Override
public void create() {
    //use default prepend shader code for batch, some gpu drivers are less forgiving
    batch = new SpriteBatch();
    //depth texture not currently sampled
    ShaderProgram.pedantic = false;
    modelCache = new ModelCache();
    ShaderProgram.prependVertexCode = Gdx.app.getType().equals(Application.ApplicationType.Desktop) ? "#version 140\n #extension GL_ARB_explicit_attrib_location : enable\n" : "#version 300 es\n";
    ShaderProgram.prependFragmentCode = Gdx.app.getType().equals(Application.ApplicationType.Desktop) ? "#version 140\n #extension GL_ARB_explicit_attrib_location : enable\n" : "#version 300 es\n";
    renderContext = new RenderContext(new DefaultTextureBinder(DefaultTextureBinder.ROUNDROBIN));
    shaderProvider = new BaseShaderProvider() {

        @Override
        protected Shader createShader(Renderable renderable) {
            return new MRTShader(renderable);
        }
    };
    renderableSorter = new DefaultRenderableSorter() {

        @Override
        public int compare(Renderable o1, Renderable o2) {
            return o1.shader.compareTo(o2.shader);
        }
    };
    mrtSceneShader = new ShaderProgram(Gdx.files.internal("data/g3d/shaders/mrtscene.vert"), Gdx.files.internal("data/g3d/shaders/mrtscene.frag"));
    if (!mrtSceneShader.isCompiled()) {
        System.out.println(mrtSceneShader.getLog());
    }
    quad = createFullScreenQuad();
    camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    camera.near = 1f;
    camera.far = 100f;
    camera.position.set(3, 5, 10);
    camera.lookAt(0, 2, 0);
    camera.up.set(0, 1, 0);
    camera.update();
    cameraController = new FirstPersonCameraController(camera);
    cameraController.setVelocity(50);
    Gdx.input.setInputProcessor(cameraController);
    frameBuffer = new MRTFrameBuffer(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 3);
    AssetManager assetManager = new AssetManager();
    assetManager.load("data/g3d/materials/cannon.g3db", Model.class);
    assetManager.finishLoading();
    Model scene = assetManager.get("data/g3d/materials/cannon.g3db");
    cannon = new ModelInstance(scene, "Cannon_LP");
    cannon.transform.setToTranslationAndScaling(0, 0, 0, 0.001f, 0.001f, 0.001f);
    ModelBuilder modelBuilder = new ModelBuilder();
    for (int i = 0; i < NUM_LIGHTS; i++) {
        modelBuilder.begin();
        Light light = new Light();
        light.color.set(MathUtils.random(1f), MathUtils.random(1f), MathUtils.random(1f));
        light.position.set(MathUtils.random(-10f, 10f), MathUtils.random(10f, 15f), MathUtils.random(-10f, 10f));
        light.vy = MathUtils.random(10f, 20f);
        light.vx = MathUtils.random(-10f, 10f);
        light.vz = MathUtils.random(-10f, 10f);
        MeshPartBuilder meshPartBuilder = modelBuilder.part("light", GL20.GL_TRIANGLES, VertexAttributes.Usage.Position | VertexAttributes.Usage.ColorPacked | VertexAttributes.Usage.Normal, new Material());
        meshPartBuilder.setColor(light.color.x, light.color.y, light.color.z, 1f);
        meshPartBuilder.sphere(0.2f, 0.2f, 0.2f, 10, 10);
        light.lightInstance = new ModelInstance(modelBuilder.end());
        lights.add(light);
    }
    modelBuilder.begin();
    MeshPartBuilder meshPartBuilder = modelBuilder.part("floor", GL20.GL_TRIANGLES, VertexAttributes.Usage.Position | VertexAttributes.Usage.ColorPacked | VertexAttributes.Usage.Normal, new Material());
    meshPartBuilder.setColor(0.2f, 0.2f, 0.2f, 1f);
    meshPartBuilder.box(0, -0.1f, 0f, 20f, 0.1f, 20f);
    floorInstance = new ModelInstance(modelBuilder.end());
    Gdx.input.setInputProcessor(new InputMultiplexer(this, cameraController));
}
Also used : RenderContext(com.badlogic.gdx.graphics.g3d.utils.RenderContext) AssetManager(com.badlogic.gdx.assets.AssetManager) Material(com.badlogic.gdx.graphics.g3d.Material) DefaultRenderableSorter(com.badlogic.gdx.graphics.g3d.utils.DefaultRenderableSorter) PerspectiveCamera(com.badlogic.gdx.graphics.PerspectiveCamera) MeshPartBuilder(com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder) Shader(com.badlogic.gdx.graphics.g3d.Shader) SpriteBatch(com.badlogic.gdx.graphics.g2d.SpriteBatch) BaseShaderProvider(com.badlogic.gdx.graphics.g3d.utils.BaseShaderProvider) ModelCache(com.badlogic.gdx.graphics.g3d.ModelCache) ModelInstance(com.badlogic.gdx.graphics.g3d.ModelInstance) ModelBuilder(com.badlogic.gdx.graphics.g3d.utils.ModelBuilder) InputMultiplexer(com.badlogic.gdx.InputMultiplexer) Renderable(com.badlogic.gdx.graphics.g3d.Renderable) ShaderProgram(com.badlogic.gdx.graphics.glutils.ShaderProgram) Model(com.badlogic.gdx.graphics.g3d.Model) FirstPersonCameraController(com.badlogic.gdx.graphics.g3d.utils.FirstPersonCameraController) DefaultTextureBinder(com.badlogic.gdx.graphics.g3d.utils.DefaultTextureBinder)

Aggregations

Shader (com.badlogic.gdx.graphics.g3d.Shader)6 Renderable (com.badlogic.gdx.graphics.g3d.Renderable)2 InputMultiplexer (com.badlogic.gdx.InputMultiplexer)1 AssetManager (com.badlogic.gdx.assets.AssetManager)1 PerspectiveCamera (com.badlogic.gdx.graphics.PerspectiveCamera)1 SpriteBatch (com.badlogic.gdx.graphics.g2d.SpriteBatch)1 Material (com.badlogic.gdx.graphics.g3d.Material)1 Model (com.badlogic.gdx.graphics.g3d.Model)1 ModelCache (com.badlogic.gdx.graphics.g3d.ModelCache)1 ModelInstance (com.badlogic.gdx.graphics.g3d.ModelInstance)1 ParticleShader (com.badlogic.gdx.graphics.g3d.particles.ParticleShader)1 DefaultShader (com.badlogic.gdx.graphics.g3d.shaders.DefaultShader)1 BaseShaderProvider (com.badlogic.gdx.graphics.g3d.utils.BaseShaderProvider)1 DefaultRenderableSorter (com.badlogic.gdx.graphics.g3d.utils.DefaultRenderableSorter)1 DefaultTextureBinder (com.badlogic.gdx.graphics.g3d.utils.DefaultTextureBinder)1 FirstPersonCameraController (com.badlogic.gdx.graphics.g3d.utils.FirstPersonCameraController)1 MeshPartBuilder (com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder)1 ModelBuilder (com.badlogic.gdx.graphics.g3d.utils.ModelBuilder)1 RenderContext (com.badlogic.gdx.graphics.g3d.utils.RenderContext)1 ShaderProgram (com.badlogic.gdx.graphics.glutils.ShaderProgram)1