package speiger.src.coreengine.platform.graphics.api.core;

import speiger.src.coreengine.platform.graphics.api.buffer.VertexBuffer;
import speiger.src.coreengine.platform.graphics.api.mesh.DynamicMesh;
import speiger.src.coreengine.platform.graphics.api.mesh.Mesh;
import speiger.src.coreengine.platform.graphics.api.shader.ShaderPipeline;
import speiger.src.coreengine.platform.graphics.api.texture.Texture;
import speiger.src.coreengine.platform.graphics.api.utils.AccessType;
import speiger.src.coreengine.platform.graphics.api.utils.GraphicsResource;
import speiger.src.coreengine.platform.graphics.api.utils.SampledTexture;

public interface GraphicsCommandBuffer extends GraphicsResource, CommandBuffer {
	GraphicsCommandBuffer begin();
	GraphicsCommandBuffer setScissors(int x, int y, int width, int height);
	
	GraphicsCommandBuffer pipeline(ShaderPipeline pipeline);
	
	GraphicsCommandBuffer mesh(Mesh mesh);
	GraphicsCommandBuffer mesh(DynamicMesh mesh);
	
	GraphicsCommandBuffer texture(int binding, SampledTexture texture);
	GraphicsCommandBuffer texture(int binding, Texture texture, AccessType access);
	
	GraphicsCommandBuffer uniform(int binding, VertexBuffer buffer);
	GraphicsCommandBuffer uniform(int binding, VertexBuffer buffer, long offset, long size);
	
	GraphicsCommandBuffer storage(int binding, VertexBuffer buffer);
	GraphicsCommandBuffer storage(int binding, VertexBuffer buffer, long offset, long size);
	
	GraphicsCommandBuffer drawArrays(int offset, int count);
	GraphicsCommandBuffer drawElements(int offset, int count);
	
	GraphicsCommandBuffer pushScissors(int x, int y, int width, int height);
	GraphicsCommandBuffer popScissors();
	GraphicsCommandBuffer end();
	
}
