def bind_depth_texture(self, size): """Create depth texture for shadow map.""" width, height = size texture_type = GL_TEXTURE_2D self.__depth_map_fbo = glGenFramebuffers(1) depth_map = self.__textures_ids[len(self.__textures)] glBindTexture(texture_type, depth_map) self.__textures.append(2) glTexImage2D(texture_type, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, None) glTexParameteri(texture_type, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glTexParameteri(texture_type, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameteri(texture_type, GL_TEXTURE_WRAP_S, GL_REPEAT) glTexParameteri(texture_type, GL_TEXTURE_WRAP_T, GL_REPEAT) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LESS) glBindFramebuffer(GL_FRAMEBUFFER, self.__depth_map_fbo) glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depth_map, 0) glDrawBuffer(GL_NONE) glReadBuffer(GL_NONE) glBindFramebuffer(GL_FRAMEBUFFER, 0)
def __init__(self, pos): super().__init__(self._emptyTileData, pos, (self.micronSize, self.micronSize), (0, 1), 'megatiles', shouldDelayAllocation = True) ## Counts the number of tiles we've rendered to ourselves. self.numRenderedTiles = 0 ## Whether or not we've allocated memory for our texture yet. self.haveAllocatedMemory = False global megaTileFramebuffer if megaTileFramebuffer is None: megaTileFramebuffer = glGenFramebuffers(1)
def __init__(self, w, h, color_texture, depth_texture): self._gl_id = glGenFramebuffers(1); self._ct = color_texture self._dt = depth_texture with self: glDrawBuffer(GL_COLOR_ATTACHMENT0) glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, gl_id(color_texture), 0); glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, gl_id(depth_texture), 0); rid = glGenRenderbuffers(1) glBindRenderbuffer(GL_RENDERBUFFER, rid) glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, w, h) glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rid) glBindRenderbuffer(GL_RENDERBUFFER, 0) e = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER); if e != GL_FRAMEBUFFER_COMPLETE: raise Exception('GOT PROBLEMS {}'.format(e))
def create(self, buffer): self.FBO = glGenFramebuffers(1) self.bind() buffer.attach() self.unbind()
def __enter__(self): if self.gl_identifier is None: self.gl_identifier = glGenFramebuffers(1) glBindFramebuffer(GL_FRAMEBUFFER, self.gl_identifier) return self