(view as text)
diff --git a/Source/Core/VideoBackends/OGL/StreamBuffer.cpp b/Source/Core/VideoBackends/OGL/StreamBuffer.cpp
index 71bfa40..cffc712 100644
--- a/Source/Core/VideoBackends/OGL/StreamBuffer.cpp
+++ b/Source/Core/VideoBackends/OGL/StreamBuffer.cpp
@@ -286,6 +286,37 @@ public:
static const u32 ALIGN_PINNED_MEMORY = 4096;
};
+class StreamingHack : public StreamBuffer
+{
+public:
+ StreamingHack(u32 type, size_t size) : StreamBuffer(type, size) {
+ //CreateFences();
+ glBindBuffer(m_buffertype, m_buffer);
+ glBufferData(m_buffertype, size, 0, GL_STREAM_DRAW);
+ m_pointer = (u8*)glMapBufferRange(m_buffertype, 0, m_size,
+ GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_UNSYNCHRONIZED_BIT);
+ glUnmapBuffer(m_buffertype);
+ }
+
+ ~StreamingHack() {
+ //DeleteFences();
+ glBindBuffer(m_buffertype, 0);
+ }
+
+ std::pair<u8*, size_t> Map(size_t size, u32 stride) {
+ Align(stride);
+ //AllocMemory(size);
+ if (m_iterator + size >= m_size) m_iterator = 0;
+ return std::make_pair(m_pointer + m_iterator, m_iterator);
+ }
+
+ void Unmap(size_t used_size) {
+ m_iterator += used_size;
+ }
+
+ u8* m_pointer;
+};
+
/* Fifo based on the glBufferSubData call.
* As everything must be copied before glBufferSubData returns,
* an additional memcpy in the driver will be done.
@@ -346,6 +377,8 @@ public:
// choose best streaming library based on the supported extensions and known issues
StreamBuffer* StreamBuffer::Create(u32 type, size_t size)
{
+ return new BufferSubData(type, size);
+
bool nvidia = !strcmp(g_ogl_config.gl_vendor, "NVIDIA Corporation");
if (g_ogl_config.bSupportsGLBufferStorage &&