mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-04-07 12:34:31 +02:00
Fix compilation on android and add the simple getBufferIDUnsynced in bindUniformBuffer
This commit is contained in:
parent
e428248472
commit
38bfee7b72
10 changed files with 25 additions and 36 deletions
|
@ -239,7 +239,7 @@ public:
|
|||
virtual GLuint getFramebufferID(const FramebufferPointer& framebuffer) = 0;
|
||||
virtual GLuint getTextureID(const TexturePointer& texture) final;
|
||||
virtual GLuint getBufferID(const Buffer& buffer) = 0;
|
||||
virtual GLuint getBufferIDUnsafe(const Buffer& buffer) = 0;
|
||||
virtual GLuint getBufferIDUnsynced(const Buffer& buffer) = 0;
|
||||
virtual GLuint getQueryID(const QueryPointer& query) = 0;
|
||||
|
||||
virtual GLFramebuffer* syncGPUObject(const Framebuffer& framebuffer) = 0;
|
||||
|
|
|
@ -40,23 +40,11 @@ void GLBackend::do_setInputBuffer(const Batch& batch, size_t paramOffset) {
|
|||
BufferPointer buffer = batch._buffers.get(batch._params[paramOffset + 2]._uint);
|
||||
uint32 channel = batch._params[paramOffset + 3]._uint;
|
||||
|
||||
// if (channel < getNumInputBuffers()) {
|
||||
if (channel < getNumInputBuffers()) {
|
||||
bool isModified = false;
|
||||
if (_input._buffers[channel] != buffer) {
|
||||
_input._buffers[channel] = buffer;
|
||||
|
||||
GLuint vbo = 0;
|
||||
if (buffer) {
|
||||
// vbo = getBufferID((*buffer));
|
||||
// vbo = getBufferIDUnsafe((*buffer));
|
||||
auto* object = Backend::getGPUObject<GLBuffer>((*buffer));
|
||||
|
||||
if (object) {
|
||||
vbo = object->_buffer;
|
||||
}
|
||||
}
|
||||
_input._bufferVBOs[channel] = vbo;
|
||||
|
||||
_input._bufferVBOs[channel] = getBufferIDUnsynced((*buffer));
|
||||
isModified = true;
|
||||
}
|
||||
|
||||
|
@ -73,7 +61,7 @@ void GLBackend::do_setInputBuffer(const Batch& batch, size_t paramOffset) {
|
|||
if (isModified) {
|
||||
_input._invalidBuffers.set(channel);
|
||||
}
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
void GLBackend::initInput() {
|
||||
|
@ -135,7 +123,7 @@ void GLBackend::do_setIndexBuffer(const Batch& batch, size_t paramOffset) {
|
|||
if (indexBuffer != _input._indexBuffer) {
|
||||
_input._indexBuffer = indexBuffer;
|
||||
if (indexBuffer) {
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, getBufferIDUnsafe(*indexBuffer));
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, getBufferIDUnsynced(*indexBuffer));
|
||||
} else {
|
||||
// FIXME do we really need this? Is there ever a draw call where we care that the element buffer is null?
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
|
@ -152,7 +140,7 @@ void GLBackend::do_setIndirectBuffer(const Batch& batch, size_t paramOffset) {
|
|||
if (buffer != _input._indirectBuffer) {
|
||||
_input._indirectBuffer = buffer;
|
||||
if (buffer) {
|
||||
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, getBufferIDUnsafe(*buffer));
|
||||
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, getBufferIDUnsynced(*buffer));
|
||||
} else {
|
||||
// FIXME do we really need this? Is there ever a draw call where we care that the element buffer is null?
|
||||
glBindBuffer(GL_DRAW_INDIRECT_BUFFER, 0);
|
||||
|
|
|
@ -85,6 +85,8 @@ void GLBackend::do_setPipeline(const Batch& batch, size_t paramOffset) {
|
|||
auto& cameraCorrectionBuffer = _transform._viewCorrectionEnabled ?
|
||||
_pipeline._cameraCorrectionBuffer._buffer :
|
||||
_pipeline._cameraCorrectionBufferIdentity._buffer;
|
||||
// Because we don't sync Buffers in the bindUniformBuffer, let s force this buffer synced
|
||||
getBufferID(*cameraCorrectionBuffer);
|
||||
bindUniformBuffer(gpu::slot::buffer::CameraCorrection, cameraCorrectionBuffer, 0, sizeof(CameraCorrection));
|
||||
}
|
||||
(void)CHECK_GL_ERROR();
|
||||
|
@ -170,13 +172,10 @@ void GLBackend::bindUniformBuffer(uint32_t slot, const BufferPointer& buffer, GL
|
|||
return;
|
||||
}
|
||||
|
||||
// Sync BufferObject
|
||||
auto* object = syncGPUObject(*bufferState.buffer);
|
||||
// auto glBO = getBufferIDUnsafe(*buffer);
|
||||
|
||||
if (object) {
|
||||
glBindBufferRange(GL_UNIFORM_BUFFER, slot, object->_buffer, bufferState.offset, bufferState.size);
|
||||
|
||||
// Grab the true gl Buffer object
|
||||
auto glBO = getBufferIDUnsynced(*buffer);
|
||||
if (glBO) {
|
||||
glBindBufferRange(GL_UNIFORM_BUFFER, slot, glBO, bufferState.offset, bufferState.size);
|
||||
_uniform._buffers[slot] = bufferState;
|
||||
(void)CHECK_GL_ERROR();
|
||||
} else {
|
||||
|
|
|
@ -50,13 +50,11 @@ public:
|
|||
}
|
||||
|
||||
template <typename GLBufferType>
|
||||
static GLuint getIdUnsafe(GLBackend& backend, const Buffer& buffer) {
|
||||
static GLuint getIdUnsynced(GLBackend& backend, const Buffer& buffer) {
|
||||
GLBufferType* object = Backend::getGPUObject<GLBufferType>(buffer);
|
||||
|
||||
if (object) {
|
||||
return object->_buffer;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -134,7 +134,7 @@ protected:
|
|||
GLFramebuffer* syncGPUObject(const Framebuffer& framebuffer) override;
|
||||
|
||||
GLuint getBufferID(const Buffer& buffer) override;
|
||||
GLuint getBufferIDUnsafe(const Buffer& buffer) override;
|
||||
GLuint getBufferIDUnsynced(const Buffer& buffer) override;
|
||||
GLuint getResourceBufferID(const Buffer& buffer);
|
||||
GLBuffer* syncGPUObject(const Buffer& buffer) override;
|
||||
|
||||
|
|
|
@ -83,8 +83,8 @@ GLuint GL41Backend::getBufferID(const Buffer& buffer) {
|
|||
return GL41Buffer::getId<GL41Buffer>(*this, buffer);
|
||||
}
|
||||
|
||||
GLuint GL41Backend::getBufferIDUnsafe(const Buffer& buffer) {
|
||||
return GL41Backend::getBufferID(buffer);
|
||||
GLuint GL41Backend::getBufferIDUnsynced(const Buffer& buffer) {
|
||||
return GL41Buffer::getIdUnsynced<GL41Buffer>(*this, buffer);
|
||||
}
|
||||
|
||||
GLuint GL41Backend::getResourceBufferID(const Buffer& buffer) {
|
||||
|
|
|
@ -235,7 +235,7 @@ protected:
|
|||
GLFramebuffer* syncGPUObject(const Framebuffer& framebuffer) override;
|
||||
|
||||
GLuint getBufferID(const Buffer& buffer) override;
|
||||
GLuint getBufferIDUnsafe(const Buffer& buffer) override;
|
||||
GLuint getBufferIDUnsynced(const Buffer& buffer) override;
|
||||
GLBuffer* syncGPUObject(const Buffer& buffer) override;
|
||||
|
||||
GLTexture* syncGPUObject(const TexturePointer& texture) override;
|
||||
|
|
|
@ -51,9 +51,8 @@ GLuint GL45Backend::getBufferID(const Buffer& buffer) {
|
|||
return GL45Buffer::getId<GL45Buffer>(*this, buffer);
|
||||
}
|
||||
|
||||
GLuint GL45Backend::getBufferIDUnsafe(const Buffer& buffer) {
|
||||
//return GL45Buffer::getId<GL45Buffer>(*this, buffer);
|
||||
return GL45Buffer::getIdUnsafe<GL45Buffer>(*this, buffer);
|
||||
GLuint GL45Backend::getBufferIDUnsynced(const Buffer& buffer) {
|
||||
return GL45Buffer::getIdUnsynced<GL45Buffer>(*this, buffer);
|
||||
}
|
||||
|
||||
GLBuffer* GL45Backend::syncGPUObject(const Buffer& buffer) {
|
||||
|
|
|
@ -130,6 +130,7 @@ protected:
|
|||
GLFramebuffer* syncGPUObject(const Framebuffer& framebuffer) override;
|
||||
|
||||
GLuint getBufferID(const Buffer& buffer) override;
|
||||
GLuint getBufferIDUnsynced(const Buffer& buffer) override;
|
||||
GLuint getResourceBufferID(const Buffer& buffer);
|
||||
GLBuffer* syncGPUObject(const Buffer& buffer) override;
|
||||
|
||||
|
|
|
@ -64,6 +64,10 @@ GLuint GLESBackend::getBufferID(const Buffer& buffer) {
|
|||
return GLESBuffer::getId<GLESBuffer>(*this, buffer);
|
||||
}
|
||||
|
||||
GLuint GLESBackend::getBufferIDUnsynced(const Buffer& buffer) {
|
||||
return GLESBuffer::getIdUnsynced<GLESBuffer>(*this, buffer);
|
||||
}
|
||||
|
||||
GLBuffer* GLESBackend::syncGPUObject(const Buffer& buffer) {
|
||||
return GLESBuffer::sync<GLESBuffer>(*this, buffer);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue