forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			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;
 | 
						|
}
 |