diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-05-20 17:38:52 +0200 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-05-21 10:55:09 +0200 |
commit | 13939b26d9dd270294f3491759362f62a52a8a13 (patch) | |
tree | 3e094ed77469a4a028ded41908e1879919117dd8 /include/llmr/geometry/buffer.hpp | |
parent | 238fe86571772da67cc5b3e23012b75904b0f9fb (diff) | |
download | qtlocation-mapboxgl-13939b26d9dd270294f3491759362f62a52a8a13.tar.gz |
first shot at composited blending
still missing:
- stencil+depth mask
- alpha compositing
Diffstat (limited to 'include/llmr/geometry/buffer.hpp')
-rw-r--r-- | include/llmr/geometry/buffer.hpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/include/llmr/geometry/buffer.hpp b/include/llmr/geometry/buffer.hpp index 6f43774e50..27807c809c 100644 --- a/include/llmr/geometry/buffer.hpp +++ b/include/llmr/geometry/buffer.hpp @@ -40,7 +40,10 @@ public: } glBindBuffer(bufferType, buffer); if (force) { - assert("Buffer was already deleted" && array != nullptr); + if (array == nullptr) { + throw std::runtime_error("Buffer was already deleted or doesn't contain elements"); + } + glBufferData(bufferType, pos, array, GL_STATIC_DRAW); if (!retainAfterUpload) { cleanup(); @@ -58,11 +61,15 @@ public: protected: // increase the buffer size by at least /required/ bytes. inline void *addElement() { - assert("Buffer is already bound to GPU" && buffer == 0); + if (buffer != 0) { + throw std::runtime_error("Can't add elements after buffer was bound to GPU"); + } if (length < pos + itemSize) { while (length < pos + itemSize) length += defaultLength; array = realloc(array, length); - assert("Buffer reallocation failed" && array != nullptr); + if (array == nullptr) { + throw std::runtime_error("Buffer reallocation failed¯"); + } } pos += itemSize; return static_cast<char *>(array) + (pos - itemSize); @@ -70,7 +77,9 @@ protected: // Get a pointer to the item at a given index. inline void *getElement(size_t index) { - assert("Buffer was deleted" && array != nullptr); + if (array == nullptr) { + throw std::runtime_error("Buffer was already deleted or doesn't contain elements"); + } if (index * itemSize >= pos) { throw new std::runtime_error("Can't get element after array bounds"); |