package speiger.src.coreengine.rendering.utils.values;

public interface IGLValue {
	public int glValue();
	
	public static interface IGLBuffer extends IGLValue {}
	public static interface ISourceFactor extends IGLValue {}
	public static interface IDestinationFactor extends IGLValue {}
	public static interface IGLMode extends IGLValue {
		public int primitiveLength();
		public boolean isConnective();
		public int indeciesCount(int vertecies);
	}
	public static interface IGLDataType extends IGLValue {
		public int byteSize();
		public boolean supportsIBO();
	}
	public static interface IShaderType extends IGLValue {};
	public static interface ITextureFormatType extends IGLValue {
		public boolean internal();
		public int components();
		public int componentMask();
	}
	public static interface ITextureComponentFormat extends ITextureFormatType {
		public default boolean hasRed() { return redOffset() != -1; }
		public default boolean hasGreen() { return greenOffset() != -1; }
		public default boolean hasBlue() { return blueOffset() != -1; }
		public default boolean hasAlpha() { return alphaOffset() != -1; }
		public int redOffset();
		public int greenOffset();
		public int blueOffset();
		public int alphaOffset();
	}
	
	public static interface ITextureParameter extends IGLValue {
		public boolean isValid(int value);
	}
}
