]> git.sesse.net Git - nageru/blobdiff - pbo_frame_allocator.cpp
Open up for inputs that are different from the native resolution. No deinterlacing...
[nageru] / pbo_frame_allocator.cpp
index 5f9d1bda9b659cc929c998bb37b274dbe1009ad8..613506dcb61b1eb16c4bdc92dbdf88141a95db39 100644 (file)
@@ -1,5 +1,6 @@
 #include "pbo_frame_allocator.h"
 
+#include <stdbool.h>
 #include <stdint.h>
 #include <stdio.h>
 #include <cstddef>
@@ -38,6 +39,10 @@ PBOFrameAllocator::PBOFrameAllocator(size_t frame_size, GLuint width, GLuint hei
                check_error();
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
                check_error();
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+               check_error();
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+               check_error();
                glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, NULL);
                check_error();
 
@@ -47,9 +52,16 @@ PBOFrameAllocator::PBOFrameAllocator(size_t frame_size, GLuint width, GLuint hei
                check_error();
                glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
                check_error();
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+               check_error();
+               glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+               check_error();
                glTexImage2D(GL_TEXTURE_2D, 0, GL_RG8, width / 2, height, 0, GL_RG, GL_UNSIGNED_BYTE, NULL);
                check_error();
 
+               userdata[i].last_width = width;
+               userdata[i].last_height = height;
+
                freelist.push(frame);
        }
        glBindBuffer(buffer, 0);
@@ -95,11 +107,16 @@ FrameAllocator::Frame PBOFrameAllocator::alloc_frame()
                freelist.pop();  // Meh.
        }
        vf.len = 0;
+       vf.overflow = 0;
        return vf;
 }
 
 void PBOFrameAllocator::release_frame(Frame frame)
 {
+       if (frame.overflow > 0) {
+               printf("%d bytes overflow after last (PBO) frame\n", int(frame.overflow));
+       }
+
        std::unique_lock<std::mutex> lock(freelist_mutex);
        freelist.push(frame);
        //--sumsum;