summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/utils.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2019-06-20 08:22:25 +0200
committerReinUsesLisp <reinuseslisp@airmail.cc>2019-07-06 05:37:55 +0200
commit1fa21fa1927feecc63f0d81824ce4ea203f79fcc (patch)
treebff3e1dceea5a44d1698d7c88d6c61e3c9e06fee /src/video_core/renderer_opengl/utils.cpp
parentbuffer_cache: Implement a generic buffer cache (diff)
downloadyuzu-1fa21fa1927feecc63f0d81824ce4ea203f79fcc.tar
yuzu-1fa21fa1927feecc63f0d81824ce4ea203f79fcc.tar.gz
yuzu-1fa21fa1927feecc63f0d81824ce4ea203f79fcc.tar.bz2
yuzu-1fa21fa1927feecc63f0d81824ce4ea203f79fcc.tar.lz
yuzu-1fa21fa1927feecc63f0d81824ce4ea203f79fcc.tar.xz
yuzu-1fa21fa1927feecc63f0d81824ce4ea203f79fcc.tar.zst
yuzu-1fa21fa1927feecc63f0d81824ce4ea203f79fcc.zip
Diffstat (limited to 'src/video_core/renderer_opengl/utils.cpp')
-rw-r--r--src/video_core/renderer_opengl/utils.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/video_core/renderer_opengl/utils.cpp b/src/video_core/renderer_opengl/utils.cpp
index 68c36988d..22eefa1d7 100644
--- a/src/video_core/renderer_opengl/utils.cpp
+++ b/src/video_core/renderer_opengl/utils.cpp
@@ -19,23 +19,30 @@ BindBuffersRangePushBuffer::~BindBuffersRangePushBuffer() = default;
void BindBuffersRangePushBuffer::Setup(GLuint first_) {
first = first_;
- buffers.clear();
+ buffer_pointers.clear();
offsets.clear();
sizes.clear();
}
-void BindBuffersRangePushBuffer::Push(GLuint buffer, GLintptr offset, GLsizeiptr size) {
- buffers.push_back(buffer);
+void BindBuffersRangePushBuffer::Push(const GLuint* buffer, GLintptr offset, GLsizeiptr size) {
+ buffer_pointers.push_back(buffer);
offsets.push_back(offset);
sizes.push_back(size);
}
-void BindBuffersRangePushBuffer::Bind() const {
- const std::size_t count{buffers.size()};
+void BindBuffersRangePushBuffer::Bind() {
+ // Ensure sizes are valid.
+ const std::size_t count{buffer_pointers.size()};
DEBUG_ASSERT(count == offsets.size() && count == sizes.size());
if (count == 0) {
return;
}
+
+ // Dereference buffers.
+ buffers.resize(count);
+ std::transform(buffer_pointers.begin(), buffer_pointers.end(), buffers.begin(),
+ [](const GLuint* pointer) { return *pointer; });
+
glBindBuffersRange(target, first, static_cast<GLsizei>(count), buffers.data(), offsets.data(),
sizes.data());
}