package speiger.src.coreengine.rendering.tesselationOld;

import speiger.src.coreengine.math.color.ColorUtils;
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.x(), vec.y()); }
	public IVertexBuilder pos(float x, float y);
	
	public default IVertexBuilder pos(Vec3f vec) { return pos(vec.x(), vec.y(), vec.z()); }
	public IVertexBuilder pos(float x, float y, float z);
	
	public default IVertexBuilder color3f(int color) { return color3f(ColorUtils.getRF(color), ColorUtils.getGF(color), ColorUtils.getBF(color)); }
	public IVertexBuilder color3f(float r, float g, float b);
	
	public  default IVertexBuilder color4f(int color){ return color4f(ColorUtils.getRF(color), ColorUtils.getGF(color), ColorUtils.getBF(color), ColorUtils.getAF(color)); }
	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.x(), vec.y()); }
	public IVertexBuilder tex(float u, float v);
	
	public default IVertexBuilder normal(Vec3f vec) { return normal(vec.x(), vec.y(), vec.z()); }
	public IVertexBuilder normal(float x, float y, float z);
	
	public IVertexBuilder custom(float x);
	public default IVertexBuilder custom(Vec2f data) { return custom(data.x(), data.y()); }
	public IVertexBuilder custom(float x, float y);
	public default IVertexBuilder custom(Vec3f data) { return custom(data.x(), data.y(), data.z()); }
	public IVertexBuilder custom(float x, float y, float z);
	public default IVertexBuilder custom(Vec4f data) { return custom(data.x(), data.y(), data.z(), data.w());}
	public IVertexBuilder custom(float x, float y, float z, float w);
	
	public IVertexBuilder endVertex();
}