List of usage examples for net.minecraftforge.client.model.pipeline VertexBufferConsumer VertexBufferConsumer
public VertexBufferConsumer(IVertexBuilder buffer)
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); }