Exemple #1
0
    def __init__(self, sizes, surface_type, filter=GL_LINEAR, wrap=GL_CLAMP_TO_EDGE):
        """ where sizes is a dict some_key -> Size2
            textures and surfaces are later accessed by this key """
        assert len(sizes)
        self.surftype = surface_type
        self.frontbuf, self.backbuf = glGenBuffers(2)
        self.store = {}
        self.surfaces = {}
        offset = 0
        self.texnames = tuple(glGenTextures(len(sizes)))
        texnames = list(self.texnames)
        for some_key, size in sizes.items():
            texname = texnames.pop(0)
            glBindTexture(GL_TEXTURE_2D, texname)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap)
            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter)
            glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter)
            self.store[some_key] = ( texname, size, offset )
            offset += size.w*size.h*4
        self.bufsize = offset
        glBindTexture(GL_TEXTURE_2D, 0)

        glBindBuffer(GL_PIXEL_UNPACK_BUFFER, self.backbuf)
        glBufferData(GL_PIXEL_UNPACK_BUFFER, self.bufsize, gl_off_t(0), GL_STREAM_DRAW)
        glBindBuffer(GL_PIXEL_UNPACK_BUFFER, self.frontbuf)
        glBufferData(GL_PIXEL_UNPACK_BUFFER, self.bufsize, gl_off_t(0), GL_STREAM_DRAW)
        glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0)

        self.swap() # initializes self.surfaces.
Exemple #2
0
 def upload(self):
     glBindBuffer(GL_PIXEL_UNPACK_BUFFER, self.frontbuf)
     glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER)
     for texname, size, offset in self.store.values():
         glBindTexture(GL_TEXTURE_2D, texname)
         glTexImage2D(GL_TEXTURE_2D, 0, self.surftype.gl_internal_fmt,
             size.w, size.h, 0, self.surftype.gl_data_fmt,
             self.surftype.gl_data_type, gl_off_t(offset))
     self.swap()