Example usage for net.minecraftforge.client.model.pipeline VertexBufferConsumer VertexBufferConsumer

List of usage examples for net.minecraftforge.client.model.pipeline VertexBufferConsumer VertexBufferConsumer

Introduction

In this page you can find the example usage for net.minecraftforge.client.model.pipeline VertexBufferConsumer VertexBufferConsumer.

Prototype

public VertexBufferConsumer(IVertexBuilder buffer) 

Source Link

Usage

From source file:blusunrize.immersiveengineering.client.render.ItemRendererIEOBJ.java

private void renderQuadsForGroups(String[] groups, IOBJModelCallback<ItemStack> callback, IESmartObjModel model,
        List<Pair<BakedQuad, ShaderLayer>> quadsForGroup, ItemStack stack, ShaderCase sCase, ItemStack shader,
        BufferBuilder bb, Tessellator tes, Map<String, Boolean> visible, float partialTicks) {
    quadsForGroup.clear();/*from w  w w . j a  v a 2 s  . c o  m*/
    for (String g : groups) {
        if (visible.getOrDefault(g, Boolean.FALSE) && callback.shouldRenderGroup(stack, g))
            quadsForGroup.addAll(model.addQuadsForGroup(callback, stack, g, sCase, shader).stream()
                    .filter(Objects::nonNull).collect(Collectors.toList()));
        visible.remove(g);
    }
    if (!callback.areGroupsFullbright(stack, groups))
        bb.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM);
    else
        bb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
    VertexBufferConsumer vbc = new VertexBufferConsumer(bb);
    ShaderLayer lastShaderLayer = null;
    for (Pair<BakedQuad, ShaderLayer> pair : quadsForGroup) {
        BakedQuad bq = pair.getKey();
        ShaderLayer layer = pair.getValue();
        //Switch to or between dynamic layers
        boolean switchDynamic = layer != lastShaderLayer;
        if (switchDynamic) {
            //interrupt batch
            tes.draw();

            if (lastShaderLayer != null)//finish dynamic call on last layer
                lastShaderLayer.modifyRender(false, partialTicks);

            //set new layer
            lastShaderLayer = layer;

            if (lastShaderLayer != null)//start dynamic call on layer
                lastShaderLayer.modifyRender(true, partialTicks);
            //start new batch
            if (!callback.areGroupsFullbright(stack, groups))
                bb.begin(GL11.GL_QUADS, DefaultVertexFormats.ITEM);
            else
                bb.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);

        }
        bq.pipe(vbc);
    }
    tes.draw();
    if (lastShaderLayer != null)//finish dynamic call on final layer
        lastShaderLayer.modifyRender(false, partialTicks);

}