59 lines
1.3 KiB
C++
Raw Normal View History

2025-01-22 16:18:30 +01:00
#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;
}