mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-16 11:13:42 +01:00
MaterialSpecs choose their model formats
This commit is contained in:
parent
6227e81066
commit
695fe98d28
3 changed files with 18 additions and 10 deletions
|
@ -10,12 +10,14 @@ public class MaterialSpec<D extends InstanceData> {
|
||||||
public final ResourceLocation name;
|
public final ResourceLocation name;
|
||||||
|
|
||||||
private final ProgramSpec programSpec;
|
private final ProgramSpec programSpec;
|
||||||
|
private final VertexFormat modelFormat;
|
||||||
private final VertexFormat instanceFormat;
|
private final VertexFormat instanceFormat;
|
||||||
private final InstanceFactory<D> instanceFactory;
|
private final InstanceFactory<D> instanceFactory;
|
||||||
|
|
||||||
public MaterialSpec(ResourceLocation name, ProgramSpec programSpec, VertexFormat instanceFormat, InstanceFactory<D> instanceFactory) {
|
public MaterialSpec(ResourceLocation name, ProgramSpec programSpec, VertexFormat modelFormat, VertexFormat instanceFormat, InstanceFactory<D> instanceFactory) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.programSpec = programSpec;
|
this.programSpec = programSpec;
|
||||||
|
this.modelFormat = modelFormat;
|
||||||
this.instanceFormat = instanceFormat;
|
this.instanceFormat = instanceFormat;
|
||||||
this.instanceFactory = instanceFactory;
|
this.instanceFactory = instanceFactory;
|
||||||
}
|
}
|
||||||
|
@ -24,6 +26,10 @@ public class MaterialSpec<D extends InstanceData> {
|
||||||
return programSpec;
|
return programSpec;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VertexFormat getModelFormat() {
|
||||||
|
return modelFormat;
|
||||||
|
}
|
||||||
|
|
||||||
public VertexFormat getInstanceFormat() {
|
public VertexFormat getInstanceFormat() {
|
||||||
return instanceFormat;
|
return instanceFormat;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ import com.google.common.cache.Cache;
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.jozufozu.flywheel.backend.core.BasicProgram;
|
import com.jozufozu.flywheel.backend.core.BasicProgram;
|
||||||
import com.jozufozu.flywheel.backend.core.PartialModel;
|
import com.jozufozu.flywheel.backend.core.PartialModel;
|
||||||
import com.jozufozu.flywheel.backend.core.materials.ModelAttributes;
|
|
||||||
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
|
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
|
||||||
import com.jozufozu.flywheel.backend.gl.shader.ShaderCallback;
|
import com.jozufozu.flywheel.backend.gl.shader.ShaderCallback;
|
||||||
import com.jozufozu.flywheel.util.BufferBuilderReader;
|
import com.jozufozu.flywheel.util.BufferBuilderReader;
|
||||||
|
@ -36,7 +35,6 @@ import net.minecraft.util.math.BlockPos;
|
||||||
import net.minecraft.util.math.vector.Matrix4f;
|
import net.minecraft.util.math.vector.Matrix4f;
|
||||||
|
|
||||||
public class RenderMaterial<P extends BasicProgram, D extends InstanceData> {
|
public class RenderMaterial<P extends BasicProgram, D extends InstanceData> {
|
||||||
public static final VertexFormat MODEL_FORMAT = VertexFormat.builder().addAttributes(ModelAttributes.class).build();
|
|
||||||
|
|
||||||
protected final InstancedTileRenderer<P> renderer;
|
protected final InstancedTileRenderer<P> renderer;
|
||||||
protected final Cache<Object, InstancedModel<D>> models;
|
protected final Cache<Object, InstancedModel<D>> models;
|
||||||
|
@ -121,7 +119,7 @@ public class RenderMaterial<P extends BasicProgram, D extends InstanceData> {
|
||||||
private InstancedModel<D> buildModel(IBakedModel model, BlockState referenceState, MatrixStack ms) {
|
private InstancedModel<D> buildModel(IBakedModel model, BlockState referenceState, MatrixStack ms) {
|
||||||
BufferBuilderReader reader = new BufferBuilderReader(getBufferBuilder(model, referenceState, ms));
|
BufferBuilderReader reader = new BufferBuilderReader(getBufferBuilder(model, referenceState, ms));
|
||||||
|
|
||||||
VertexFormat format = MODEL_FORMAT;
|
VertexFormat format = spec.getModelFormat();
|
||||||
int vertexCount = reader.getVertexCount();
|
int vertexCount = reader.getVertexCount();
|
||||||
|
|
||||||
ByteBuffer to = ByteBuffer.allocate(vertexCount * format.getStride());
|
ByteBuffer to = ByteBuffer.allocate(vertexCount * format.getStride());
|
||||||
|
|
|
@ -2,8 +2,10 @@ package com.simibubi.create.foundation.render;
|
||||||
|
|
||||||
import static com.jozufozu.flywheel.backend.Backend.register;
|
import static com.jozufozu.flywheel.backend.Backend.register;
|
||||||
|
|
||||||
|
import com.jozufozu.flywheel.backend.core.materials.ModelAttributes;
|
||||||
import com.jozufozu.flywheel.backend.core.materials.ModelData;
|
import com.jozufozu.flywheel.backend.core.materials.ModelData;
|
||||||
import com.jozufozu.flywheel.backend.core.materials.OrientedData;
|
import com.jozufozu.flywheel.backend.core.materials.OrientedData;
|
||||||
|
import com.jozufozu.flywheel.backend.gl.attrib.VertexFormat;
|
||||||
import com.jozufozu.flywheel.backend.instancing.MaterialSpec;
|
import com.jozufozu.flywheel.backend.instancing.MaterialSpec;
|
||||||
import com.simibubi.create.Create;
|
import com.simibubi.create.Create;
|
||||||
import com.simibubi.create.content.contraptions.base.RotatingData;
|
import com.simibubi.create.content.contraptions.base.RotatingData;
|
||||||
|
@ -18,13 +20,15 @@ public class AllMaterialSpecs {
|
||||||
// noop, make sure the static field are loaded.
|
// noop, make sure the static field are loaded.
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final MaterialSpec<ModelData> TRANSFORMED = register(new MaterialSpec<>(Locations.MODEL, AllProgramSpecs.MODEL, AllInstanceFormats.MODEL, ModelData::new));
|
public static final VertexFormat UNLIT_MODEL = VertexFormat.builder().addAttributes(ModelAttributes.class).build();
|
||||||
public static final MaterialSpec<OrientedData> ORIENTED = register(new MaterialSpec<>(Locations.ORIENTED, AllProgramSpecs.ORIENTED, AllInstanceFormats.ORIENTED, OrientedData::new));
|
|
||||||
|
|
||||||
public static final MaterialSpec<RotatingData> ROTATING = register(new MaterialSpec<>(Locations.ROTATING, AllProgramSpecs.ROTATING, AllInstanceFormats.ROTATING, RotatingData::new));
|
public static final MaterialSpec<ModelData> TRANSFORMED = register(new MaterialSpec<>(Locations.MODEL, AllProgramSpecs.MODEL, UNLIT_MODEL, AllInstanceFormats.MODEL, ModelData::new));
|
||||||
public static final MaterialSpec<BeltData> BELTS = register(new MaterialSpec<>(Locations.BELTS, AllProgramSpecs.BELT, AllInstanceFormats.BELT, BeltData::new));
|
public static final MaterialSpec<OrientedData> ORIENTED = register(new MaterialSpec<>(Locations.ORIENTED, AllProgramSpecs.ORIENTED, UNLIT_MODEL, AllInstanceFormats.ORIENTED, OrientedData::new));
|
||||||
public static final MaterialSpec<ActorData> ACTORS = register(new MaterialSpec<>(Locations.ACTORS, AllProgramSpecs.ACTOR, AllInstanceFormats.ACTOR, ActorData::new));
|
|
||||||
public static final MaterialSpec<FlapData> FLAPS = register(new MaterialSpec<>(Locations.FLAPS, AllProgramSpecs.FLAPS, AllInstanceFormats.FLAP, FlapData::new));
|
public static final MaterialSpec<RotatingData> ROTATING = register(new MaterialSpec<>(Locations.ROTATING, AllProgramSpecs.ROTATING, UNLIT_MODEL, AllInstanceFormats.ROTATING, RotatingData::new));
|
||||||
|
public static final MaterialSpec<BeltData> BELTS = register(new MaterialSpec<>(Locations.BELTS, AllProgramSpecs.BELT, UNLIT_MODEL, AllInstanceFormats.BELT, BeltData::new));
|
||||||
|
public static final MaterialSpec<ActorData> ACTORS = register(new MaterialSpec<>(Locations.ACTORS, AllProgramSpecs.ACTOR, UNLIT_MODEL, AllInstanceFormats.ACTOR, ActorData::new));
|
||||||
|
public static final MaterialSpec<FlapData> FLAPS = register(new MaterialSpec<>(Locations.FLAPS, AllProgramSpecs.FLAPS, UNLIT_MODEL, AllInstanceFormats.FLAP, FlapData::new));
|
||||||
|
|
||||||
public static class Locations {
|
public static class Locations {
|
||||||
public static final ResourceLocation MODEL = new ResourceLocation("create", "model");
|
public static final ResourceLocation MODEL = new ResourceLocation("create", "model");
|
||||||
|
|
Loading…
Reference in a new issue