Hey all, first time posting. I'm having difficulty with rendering a simple cube in a tileentities TESR, I'm not great with rendering in general, so any help would be appreciated.
EDIT: I should note that I have simplified this code to be as bare bones as it can be, until I can get the cube to render correctly. https://github.com/The-PurpleOrange/Arcanacraft/blob/master/src/main/java/com/tyhone/arcanacraft/client/render/tesr/RenderTileEntityJar.java
There's the offender
When using DefaultVertexFormats.BLOCK I get this, but with DefaultVertexFormats.POSITION I get a cube, but I cant control the rgba, and it randomly flickers and goes invisible. POSITION _COLOR does something similar to BLOCK as well
Heres the TESR code:
public void render(TileEntity te, double x, double y, double z, float partialTicks, int destroyStage, float alpha){
TileEntityJar jar = (TileEntityJar) te;
double fluidLevel = jar.getFluidLevel();
double maxFluid = jar.getMaxFluid();
String fluidType = jar.getFluidType();
if(true){
Tessellator tess = Tessellator.getInstance();
BufferBuilder buffer = tess.getBuffer();
GlStateManager.pushMatrix();
//Render smooth stuff
RenderHelper.disableStandardItemLighting();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
/*if(Minecraft.isAmbientOcclusionEnabled()) {
GL11.glShadeModel(GL11.GL_SMOOTH);
}
else {
GL11.glShadeModel(GL11.GL_FLAT);
}*/
GlStateManager.translate(x, y+1, z);
buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK);
buffer.color(255, 0, 0, 255);
buildQuad(buffer, 0, 0, 0, 1, 1, 1, EnumFacing.DOWN);
buildQuad(buffer, 0, 0, 0, 1, 1, 1, EnumFacing.UP);
buildQuad(buffer, 0, 0, 0, 1, 1, 1, EnumFacing.NORTH);
buildQuad(buffer, 0, 0, 0, 1, 1, 1, EnumFacing.SOUTH);
buildQuad(buffer, 0, 0, 0, 1, 1, 1, EnumFacing.EAST);
buildQuad(buffer, 0, 0, 0, 1, 1, 1, EnumFacing.WEST);
tess.draw();
GlStateManager.disableBlend();
GlStateManager.popMatrix();
RenderHelper.enableStandardItemLighting();
}
}
And here is buildQuad:
public static void buildQuad(BufferBuilder renderer, double x, double y, double z, double w, double h, double d, EnumFacing face) {
double s = 0.1;
double x1 = x + s;
double x2 = x + w - s;
double y1 = y + s;
double y2 = y + h - s;
double z1 = z + s;
double z2 = z + d - s;
switch(face) {
case DOWN:
renderer.pos(x1, y1, z1).endVertex();
renderer.pos(x2, y1, z1).endVertex();
renderer.pos(x2, y1, z2).endVertex();
renderer.pos(x1, y1, z2).endVertex();
break;
case UP:
renderer.pos(x1, y2, z1).endVertex();
renderer.pos(x1, y2, z2).endVertex();
renderer.pos(x2, y2, z2).endVertex();
renderer.pos(x2, y2, z1).endVertex();
break;
case NORTH:
renderer.pos(x1, y1, z1).endVertex();
renderer.pos(x1, y2, z1).endVertex();
renderer.pos(x2, y2, z1).endVertex();
renderer.pos(x2, y1, z1).endVertex();
break;
case SOUTH:
renderer.pos(x1, y1, z2).endVertex();
renderer.pos(x2, y1, z2).endVertex();
renderer.pos(x2, y2, z2).endVertex();
renderer.pos(x1, y2, z2).endVertex();
break;
case WEST:
renderer.pos(x1, y1, z1).endVertex();
renderer.pos(x1, y1, z2).endVertex();
renderer.pos(x1, y2, z2).endVertex();
renderer.pos(x1, y2, z1).endVertex();
break;
case EAST:
renderer.pos(x2, y1, z1).endVertex();
renderer.pos(x2, y2, z1).endVertex();
renderer.pos(x2, y2, z2).endVertex();
renderer.pos(x2, y1, z2).endVertex();
break;
}
}