package kha.graphics5;

import kha.arrays.Uint32Array;

@:headerCode('
#include <Kore/Graphics5/Graphics.h>
')
@:headerClassCode("Kore::Graphics5::IndexBuffer* buffer;")
class IndexBuffer {
	private var data: Uint32Array;
	private var myCount: Int;

	public function new(indexCount: Int, usage: Usage, canRead: Bool = false) {
		myCount = indexCount;
		data = new Uint32Array();
		untyped __cpp__('buffer = new Kore::Graphics5::IndexBuffer(indexCount, true);');
	}

	public function delete(): Void {
		untyped __cpp__('delete buffer; buffer = nullptr;');
	}

	@:functionCode('
		data->self.data = (unsigned int*)buffer->lock() + start;
		data->self.myLength = count;
		return data;
	')
	private function lock2(start: Int, count: Int): Uint32Array {
		return data;
	}

	public function lock(?start: Int, ?count: Int): Uint32Array {
		if (start == null)
			start = 0;
		if (count == null)
			count = this.count();
		return lock2(start, count);
	}

	@:functionCode('buffer->unlock();')
	public function unlock(): Void {}

	public function count(): Int {
		return myCount;
	}
}