59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			59 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | #include "ogl.h"
 | ||
|  | 
 | ||
|  | #include <Kore/Graphics3/Graphics.h>
 | ||
|  | 
 | ||
|  | using namespace Kore; | ||
|  | 
 | ||
|  | Graphics3::IndexBuffer *IndexBufferImpl::current = nullptr; | ||
|  | 
 | ||
|  | IndexBufferImpl::IndexBufferImpl(int count) : myCount(count) {} | ||
|  | 
 | ||
|  | Graphics3::IndexBuffer::IndexBuffer(int indexCount) : IndexBufferImpl(indexCount) { | ||
|  | 	glGenBuffers(1, &bufferId); | ||
|  | 	glCheckErrors(); | ||
|  | 	data = new int[indexCount]; | ||
|  | #if defined(KINC_ANDROID) || defined(KINC_RASPBERRY_PI)
 | ||
|  | 	shortData = new u16[indexCount]; | ||
|  | #endif
 | ||
|  | } | ||
|  | 
 | ||
|  | Graphics3::IndexBuffer::~IndexBuffer() { | ||
|  | 	unset(); | ||
|  | 	delete[] data; | ||
|  | } | ||
|  | 
 | ||
|  | int *Graphics3::IndexBuffer::lock() { | ||
|  | 	return data; | ||
|  | } | ||
|  | 
 | ||
|  | void Graphics3::IndexBuffer::unlock() { | ||
|  | #if defined(KINC_ANDROID) || defined(KINC_RASPBERRY_PI)
 | ||
|  | 	for (int i = 0; i < myCount; ++i) | ||
|  | 		shortData[i] = (u16)data[i]; | ||
|  | #endif
 | ||
|  | 	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferId); | ||
|  | 	glCheckErrors(); | ||
|  | #if defined(KINC_ANDROID) || defined(KINC_RASPBERRY_PI)
 | ||
|  | 	glBufferData(GL_ELEMENT_ARRAY_BUFFER, myCount * 2, shortData, GL_STATIC_DRAW); | ||
|  | 	glCheckErrors(); | ||
|  | #else
 | ||
|  | 	glBufferData(GL_ELEMENT_ARRAY_BUFFER, myCount * 4, data, GL_STATIC_DRAW); | ||
|  | 	glCheckErrors(); | ||
|  | #endif
 | ||
|  | } | ||
|  | 
 | ||
|  | void Graphics3::IndexBuffer::_set() { | ||
|  | 	current = this; | ||
|  | 	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferId); | ||
|  | 	glCheckErrors(); | ||
|  | } | ||
|  | 
 | ||
|  | void IndexBufferImpl::unset() { | ||
|  | 	if ((void *)current == (void *)this) | ||
|  | 		current = nullptr; | ||
|  | } | ||
|  | 
 | ||
|  | int Graphics3::IndexBuffer::count() { | ||
|  | 	return myCount; | ||
|  | } |