package speiger.src.coreengine.rendering.tesselation;

import speiger.src.coreengine.math.misc.ColorObject;
import speiger.src.coreengine.math.vector.floats.Vec2f;
import speiger.src.coreengine.math.vector.floats.Vec3f;
import speiger.src.coreengine.math.vector.floats.Vec4f;

public interface IVertexBuilder
{
	public default IVertexBuilder pos(Vec2f vec) { return pos(vec.getX(), vec.getY()); }
	public IVertexBuilder pos(float x, float y);
	
	public default IVertexBuilder pos(Vec3f vec) { return pos(vec.getX(), vec.getY(), vec.getZ()); }
	public IVertexBuilder pos(float x, float y, float z);
	
	public default IVertexBuilder color3f(ColorObject color) { return color3f(color.getRedFloat(), color.getGreenFloat(), color.getBlueFloat()); }
	public IVertexBuilder color3f(float r, float g, float b);
	
	public  default IVertexBuilder color4f(ColorObject color){ return color4f(color.getRedFloat(), color.getGreenFloat(), color.getBlueFloat(), color.getAlphaFloat()); }
	public default IVertexBuilder color4f(float r, float g, float b) { return color4f(r, g, b, 1F); }
	public IVertexBuilder color4f(float r, float g, float b, float a);
	
	public default IVertexBuilder tex(Vec2f vec) { return tex(vec.getX(), vec.getY()); }
	public IVertexBuilder tex(float u, float v);
	
	public default IVertexBuilder normal(Vec3f vec) { return normal(vec.getX(), vec.getY(), vec.getZ()); }
	public IVertexBuilder normal(float x, float y, float z);
	
	public IVertexBuilder custom(float x);
	public default IVertexBuilder custom(Vec2f data) { return custom(data.getX(), data.getY()); }
	public IVertexBuilder custom(float x, float y);
	public default IVertexBuilder custom(Vec3f data) { return custom(data.getX(), data.getY(), data.getZ()); }
	public IVertexBuilder custom(float x, float y, float z);
	public default IVertexBuilder custom(Vec4f data) { return custom(data.getX(), data.getY(), data.getZ(), data.getW());}
	public IVertexBuilder custom(float x, float y, float z, float w);
	
	public IVertexBuilder endVertex();
}