Ejemplo n.º 1
0
    def setup(self):
        super().setup()
        # create program
        self.program = puregl.program.create(*glsl.read('skybox'))

        # create texture
        self.texture = glGenTextures(1)
        glBindTexture(GL_TEXTURE_2D, self.texture)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, self.width, self.height, 0,
                     GL_RGB, GL_FLOAT, None)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
        glBindTexture(GL_TEXTURE_2D, 0)

        # create fbo
        self.fbo = glGenFramebuffers(1)
        with puregl.fbo.bind(self.fbo):
            glDrawBuffers(1, [GL_COLOR_ATTACHMENT0 + 0])
            glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
                                   GL_TEXTURE_2D, self.texture, 0)

            # create depth+stencil buffer
            rbo = glGenRenderbuffers(1)
            glBindRenderbuffer(GL_RENDERBUFFER, rbo)
            glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
                                  self.width, self.height)
            glBindRenderbuffer(GL_RENDERBUFFER, 0)

            glFramebufferRenderbuffer(GL_FRAMEBUFFER,
                                      GL_DEPTH_STENCIL_ATTACHMENT,
                                      GL_RENDERBUFFER, rbo)
            assert glCheckFramebufferStatus(
                GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
Ejemplo n.º 2
0
    def setup(self):
        glEnable(GL_DEPTH_TEST)
        glEnable(GL_CULL_FACE)
        glEnable(GL_PROGRAM_POINT_SIZE)

        self.prog = program.create(*glsl.read("matcap"))
        self.matcap_tex = texture.create(self.matcap_img, 0, GL_RGB)
Ejemplo n.º 3
0
    def setup(self):
        super().setup()
        # Create Shader
        self.program = puregl.program.create(*glsl.read('brdf'))

        # Create textures
        self.brdflut = glGenTextures(1)
        # pre-allocate enough memory for the LUT texture.
        glBindTexture(GL_TEXTURE_2D, self.brdflut)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, self.width, self.height, 0,
                     GL_RG, GL_FLOAT, None)
        # be sure to set wrapping mode to GL_CLAMP_TO_EDGE
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

        # create fbo
        self.fbo = glGenFramebuffers(1)

        with puregl.fbo.bind(self.fbo):
            glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
                                   GL_TEXTURE_2D, self.brdflut, 0)
            assert glCheckFramebufferStatus(
                GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
Ejemplo n.º 4
0
    def setup(self):
        super().setup()
        # Create textures
        # ---------------
        self.texture = glGenTextures(1)

        # define textures
        glBindTexture(GL_TEXTURE_CUBE_MAP, self.texture)
        for i in range(6):
            glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB32F,
                         self.width, self.height, 0, GL_RGB, GL_FLOAT, None)

        # configure textures
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,
                        GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T,
                        GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R,
                        GL_CLAMP_TO_EDGE)

        glBindTexture(GL_TEXTURE_CUBE_MAP, 0)

        # create rbo
        rbo = glGenRenderbuffers(1)
        glBindRenderbuffer(GL_RENDERBUFFER, rbo)
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24,
                              self.width, self.height)
        glBindRenderbuffer(GL_RENDERBUFFER, 0)

        # Create fbo
        # ----------
        self.fbo = glGenFramebuffers(1)

        # configure fbo
        glBindFramebuffer(GL_FRAMEBUFFER, self.fbo)

        # attach color textures
        # TODO: use geometry shader to render all sides in one pass
        # see: https://learnopengl.com/Advanced-Lighting/Shadows/Point-Shadows

        # attach rbo
        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
                                  GL_RENDERBUFFER, rbo)

        # cleanup
        assert glCheckFramebufferStatus(
            GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
        glBindFramebuffer(GL_FRAMEBUFFER, 0)

        # Create program
        # --------------
        self.program = puregl.program.create(
            *glsl.read("graphics/environment"))
Ejemplo n.º 5
0
    def setup(self):
        super().setup()
        # create program
        # --------------
        self.program = puregl.program.create(
            *glsl.read("graphics/pbrlighting"))

        with puregl.program.use(self.program):
            puregl.program.set_uniform(self.program, "projectionMatrix",
                                       np.eye(4))
            puregl.program.set_uniform(self.program, "viewMatrix", np.eye(4))
            puregl.program.set_uniform(self.program, "modelMatrix", np.eye(4))

        # create textures
        # ---------------
        self.texture = glGenTextures(1)
        glBindTexture(GL_TEXTURE_2D, self.texture)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, self.width, self.height, 0,
                     GL_RGBA, GL_FLOAT, None)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
        glBindTexture(GL_TEXTURE_2D, 0)

        # create fbo
        # ----------
        self.fbo = glGenFramebuffers(1)
        glBindFramebuffer(GL_FRAMEBUFFER, self.fbo)
        glDrawBuffers(1, [GL_COLOR_ATTACHMENT0 + 0])
        glBindTexture(GL_TEXTURE_2D, self.texture)
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + 0,
                               GL_TEXTURE_2D, self.texture, 0)
        glBindTexture(GL_TEXTURE_2D, 0)

        # create depth+stencil buffertarget, pname, param
        rbo = glGenRenderbuffers(1)
        glBindRenderbuffer(GL_RENDERBUFFER, rbo)
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, self.width,
                              self.height)
        glBindRenderbuffer(GL_RENDERBUFFER, 0)

        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
                                  GL_RENDERBUFFER, rbo)
        assert glCheckFramebufferStatus(
            GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
        glBindFramebuffer(GL_FRAMEBUFFER, 0)
Ejemplo n.º 6
0
    def setup(self):
        super().setup()
        # Create textures
        # ---------------
        self.texture = glGenTextures(1)

        # define textures
        glBindTexture(GL_TEXTURE_2D, self.texture)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, self.width,
                     self.height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, None)

        # configure textures
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER)
        glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR,
                         np.array([1, 1, 1, 1]))

        # cleanup
        glBindTexture(GL_TEXTURE_2D, 0)

        # Create fbo
        # ----------
        self.fbo = glGenFramebuffers(1)

        # configure fbo
        glBindFramebuffer(GL_FRAMEBUFFER, self.fbo)

        # attach textures
        glDrawBuffer(GL_NONE)
        glReadBuffer(GL_NONE)
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
                               GL_TEXTURE_2D, self.texture, 0)

        # cleanup
        assert glCheckFramebufferStatus(
            GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
        glBindFramebuffer(GL_FRAMEBUFFER, 0)

        # Create program
        # --------------
        self.program = puregl.program.create(*glsl.read("simple_depth"))
Ejemplo n.º 7
0
    def setup(self):
        super().setup()
        self.program = puregl.program.create(*glsl.read('gaussian'))

        self.bloom_blur_fbos = glGenFramebuffers(2)
        self.bloom_blur_texs = glGenTextures(2)
        for i in range(2):
            glBindFramebuffer(GL_FRAMEBUFFER, self.bloom_blur_fbos[i])
            glBindTexture(GL_TEXTURE_2D, self.bloom_blur_texs[i])
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, self.width, self.height,
                         0, GL_RGBA, GL_FLOAT, None)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
            glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
                                   GL_TEXTURE_2D, self.bloom_blur_texs[i], 0)

            assert glCheckFramebufferStatus(
                GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
        glBindFramebuffer(GL_FRAMEBUFFER, 0)
Ejemplo n.º 8
0
    def setup(self):
        super().setup()
        # create shader
        self.program = puregl.program.create(
            *glsl.read('cubemap.vs', 'prefilter.fs'))

        # create texture
        self.prefilter = glGenTextures(1)
        glBindTexture(GL_TEXTURE_CUBE_MAP, self.prefilter)
        for i in range(6):
            glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB32F, 128,
                         128, 0, GL_RGB, GL_FLOAT, None)

        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,
                        GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T,
                        GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R,
                        GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER,
                        GL_LINEAR_MIPMAP_LINEAR)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

        glGenerateMipmap(GL_TEXTURE_CUBE_MAP)

        glBindTexture(GL_TEXTURE_CUBE_MAP, 0)

        # create rbo
        self.rbo = glGenRenderbuffers(1)
        glBindRenderbuffer(GL_RENDERBUFFER, self.rbo)
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24,
                              self.width, self.height)
        glBindRenderbuffer(GL_RENDERBUFFER, 0)

        # create fbo
        self.fbo = glGenFramebuffers(1)
        # attach depth buffer
        with puregl.fbo.bind(self.fbo):
            glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
                                      GL_RENDERBUFFER, self.rbo)
Ejemplo n.º 9
0
    def setup(self):
        super().setup()
        # Create textures
        # ---------------
        self.texture = glGenTextures(1)

        # define textures
        glBindTexture(GL_TEXTURE_CUBE_MAP, self.texture)
        for i in range(6):
                glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X+i, 0, GL_DEPTH_COMPONENT, 
                    self.width, self.height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, None)

        # configure textures
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE)

        glBindTexture(GL_TEXTURE_CUBE_MAP, 0)

        # Create fbo
        # ----------
        self.fbo = glGenFramebuffers(1)

        # configure fbo
        glBindFramebuffer(GL_FRAMEBUFFER, self.fbo)

        # attach textures
        glDrawBuffer(GL_NONE)
        glReadBuffer(GL_NONE)
        glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, self.texture, 0)

        # cleanup
        assert glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
        glBindFramebuffer(GL_FRAMEBUFFER, 0)

        # Create program
        # --------------
        self.program = puregl.program.create(*glsl.read("point_shadow"))
Ejemplo n.º 10
0
    def setup(self):
        super().setup()
        # Create textures
        # ---------------
        self.irradiance = glGenTextures(1)
        glBindTexture(GL_TEXTURE_CUBE_MAP, self.irradiance)
        for i in range(6):
            glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB32F,
                         self.width, self.height, 0, GL_RGB, GL_FLOAT, None)

        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S,
                        GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T,
                        GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R,
                        GL_CLAMP_TO_EDGE)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

        glBindTexture(GL_TEXTURE_CUBE_MAP, 0)

        # create rbo
        rbo = glGenRenderbuffers(1)
        glBindRenderbuffer(GL_RENDERBUFFER, rbo)
        glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24,
                              self.width, self.height)
        glBindRenderbuffer(GL_RENDERBUFFER, 0)

        # Create fbo
        # ----------
        self.fbo = glGenFramebuffers(1)
        with puregl.fbo.bind(self.fbo):
            glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
                                      GL_RENDERBUFFER, rbo)

        # Create program
        # --------------
        self.program = puregl.program.create(
            *glsl.read('cubemap.vs', 'irradiance_convolution.fs'))
Ejemplo n.º 11
0
def texture(tex, rect, shuffle=(0, 1, 2, -1)):
    # create shader program
    debug_quad_program = program.create(
        *glsl.read('debug_quad.vs', 'shuffle.fs'))

    # setup program uniforms
    with program.use(debug_quad_program):
        program.set_uniform(debug_quad_program, 'projectionMatrix', np.eye(4))
        program.set_uniform(debug_quad_program, 'viewMatrix', np.eye(4))
        program.set_uniform(debug_quad_program, 'modelMatrix', np.eye(4))
        program.set_uniform(debug_quad_program, 'tex', 0)
        program.set_uniform(debug_quad_program, 'shuffle.red', shuffle[0])
        program.set_uniform(debug_quad_program, 'shuffle.green', shuffle[1])
        program.set_uniform(debug_quad_program, 'shuffle.blue', shuffle[2])
        program.set_uniform(debug_quad_program, 'shuffle.alpha', shuffle[3])

    # draw texture quad
    glViewport(*rect)
    with program.use(debug_quad_program):
        glActiveTexture(GL_TEXTURE0 + 0)
        glBindTexture(GL_TEXTURE_2D, tex)
        quad(debug_quad_program)
        glBindTexture(GL_TEXTURE_2D, 0)
Ejemplo n.º 12
0
    def setup(self):
        super().setup()
        # Create textures
        # ---------------
        self.gPosition, self.gNormal, self.gAlbedo, self.gEmission, self.gRoughness, self.gMetallic = glGenTextures(6)
        
        # define textures
        glBindTexture(GL_TEXTURE_2D, self.gPosition)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, self.width, self.height, 0, GL_RGBA, GL_FLOAT, None)

        glBindTexture(GL_TEXTURE_2D, self.gNormal)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, self.width, self.height, 0, GL_RGB, GL_FLOAT, None)

        glBindTexture(GL_TEXTURE_2D, self.gAlbedo)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, self.width, self.height, 0, GL_RGB, GL_FLOAT, None)

        glBindTexture(GL_TEXTURE_2D, self.gEmission)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, self.width, self.height, 0, GL_RGB, GL_FLOAT, None)

        glBindTexture(GL_TEXTURE_2D, self.gRoughness)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, self.width, self.height, 0, GL_RED, GL_FLOAT, None)

        glBindTexture(GL_TEXTURE_2D, self.gMetallic)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, self.width, self.height, 0, GL_RED, GL_FLOAT, None)
        
        # configure textures
        for tex in [self.gPosition, self.gNormal, self.gAlbedo, self.gEmission, self.gRoughness, self.gMetallic]:
            glBindTexture(GL_TEXTURE_2D, tex)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
        glBindTexture(GL_TEXTURE_2D, 0)

        # create render buffer
        self.gDepth = glGenTextures(1)
        glBindTexture(GL_TEXTURE_2D, self.gDepth)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, self.width, self.height, 0, GL_DEPTH_COMPONENT, GL_FLOAT, None)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
        glBindTexture(GL_TEXTURE_2D, 0)

        # Create fbo
        # ----------
        self.fbo = glGenFramebuffers(1)

        # configure fbo
        glBindFramebuffer(GL_FRAMEBUFFER, self.fbo)
        glDrawBuffers(6, [GL_COLOR_ATTACHMENT0+i for i in range(6)])

        # attach textures
        for i, tex in enumerate([self.gPosition, self.gNormal, self.gAlbedo, self.gEmission, self.gRoughness, self.gMetallic]):
            glFramebufferTexture2D(
                GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+i, GL_TEXTURE_2D, tex, 0
            )

        # attach render buffers
        glFramebufferTexture2D(
            GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, self.gDepth, 0
        )

        # cleanup
        assert glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
        glBindFramebuffer(GL_FRAMEBUFFER, 0)

        # Create program
        # --------------
        self.program = puregl.program.create(*glsl.read("graphics/geometry"))
Ejemplo n.º 13
0
width, height = 1024, 768
model_matrix = np.identity(4)
window = GLFWViewer(width, height, (0.6, 0.7, 0.7, 1.0))

import logging

logging.basicConfig(
    filename=None,
    level=logging.ERROR,
    format='%(levelname)s:%(module)s.%(funcName)s: %(message)s')

with window:
    glEnable(GL_DEPTH_TEST)
    glEnable(GL_CULL_FACE)

    ssao_geometry_program = program.create(*glsl.read("ssao_geometry"))

    # create gBuffer
    # --------------
    gBuffer = glGenFramebuffers(1)
    ssao_width = window.width
    ssao_height = window.height
    gPosition, gNormal, gAlbedo = glGenTextures(3)

    with fbo.bind(gBuffer):
        # create color attachments
        glDrawBuffers(
            3,
            [GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2])
        for i, tex in enumerate([gPosition, gNormal, gAlbedo]):
            glBindTexture(GL_TEXTURE_2D, tex)
Ejemplo n.º 14
0
    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)
    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)
    glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE)

    # attach cubemap to fbo depth attachment
    glBindFramebuffer(GL_FRAMEBUFFER, shadow_depth_fbo)
    glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
                         shadow_depth_cubemap, 0)
    glDrawBuffer(GL_NONE)
    glReadBuffer(GL_NONE)
    assert glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE
    glBindFramebuffer(GL_FRAMEBUFFER, 0)

    # create shader
    point_shadow_program = program.create(*glsl.read("point_shadow"))

    aspect = shadow_width / shadow_height
    near_plane = 1.0
    far_plane = 8.0
    lightPos = glm.vec3(0, 3, 0)

    shadowProj = glm.perspective(glm.radians(90.0), aspect, near_plane,
                                 far_plane)

    shadowTransforms = []
    shadowTransforms.append(
        shadowProj * glm.lookAt(lightPos, lightPos + glm.vec3(1.0, 0.0, 0.0),
                                glm.vec3(0.0, -1.0, 0.0)))
    shadowTransforms.append(
        shadowProj * glm.lookAt(lightPos, lightPos + glm.vec3(-1.0, 0.0, 0.0),
Ejemplo n.º 15
0
pointlight = Pointlight(position=glm.vec3(5, 2, 0.5),
                        color=glm.vec3(1, 0.7, 0.1) * 30,
                        near=1.0,
                        far=8.0)

with window:
    # SETUP GL
    # ========
    glEnable(GL_DEPTH_TEST)
    glEnable(GL_CULL_FACE)

    # Geometry Pass
    # -------------
    gBuffer = glGenFramebuffers(1)
    geometry_program = program.create(*glsl.read("deferred_geometry"))
    gPosition, gNormal, gAlbedoSpecular = glGenTextures(3)

    glBindFramebuffer(GL_FRAMEBUFFER, gBuffer)
    glDrawBuffers(3, [
        GL_COLOR_ATTACHMENT0 + 0, GL_COLOR_ATTACHMENT0 + 1,
        GL_COLOR_ATTACHMENT0 + 2
    ])
    for i, tex in enumerate([gPosition, gNormal, gAlbedoSpecular]):
        glBindTexture(GL_TEXTURE_2D, tex)
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA,
                     GL_FLOAT, None)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i,
                               GL_TEXTURE_2D, tex, 0)
Ejemplo n.º 16
0
environment_data *= 1

with window:
    glEnable(GL_PROGRAM_POINT_SIZE)
    glEnable(GL_DEPTH_TEST)
    glEnable(GL_CULL_FACE)

    # Create shading programs
    # =======================

    ## create material textures
    diffuse_tex = texture.create(diffuse_data, slot=0, format=GL_BGR)
    specular_tex = texture.create(specular_data, slot=1, format=GL_BGR)

    ## link programs
    lambert_program = program.create(*glsl.read('lambert'))
    phong_program = program.create(*glsl.read('phong'))
    pbr_program = program.create(*glsl.read('pbr'))

    # Setup Shadow mapping
    # ====================
    depth_program = program.create(*glsl.read('simple_depth'))
    shadow_fbo = glGenFramebuffers(1)
    shadow_fbo_width, shadow_fbo_height = 1024, 1024
    shadow_tex = texture.create((shadow_fbo_width, shadow_fbo_height),
                                slot=2,
                                format=GL_DEPTH_COMPONENT,
                                wrap_s=GL_CLAMP_TO_BORDER,
                                wrap_t=GL_CLAMP_TO_BORDER,
                                border_color=(1.0, 1.0, 1.0, 1.0))
Ejemplo n.º 17
0
    def setup(self):
        logging.debug("setup viewer")
        # Render passes
        # -------------

        # geometry
        self.geometry_pass.setup()

        # environment
        self.environment_tex = texture.create(self.environment_image,
                                              0,
                                              format=GL_RGB,
                                              wrap_s=GL_CLAMP_TO_EDGE,
                                              wrap_t=GL_CLAMP_TO_EDGE,
                                              min_filter=GL_LINEAR,
                                              mag_filter=GL_LINEAR)
        self.environment_pass.texture = self.environment_tex
        self.environment_pass.setup()
        self.environment_pass.render()

        # ibl
        self.prefilter_pass.setup()
        self.prefilter_pass.environment = self.environment_pass.cubemap
        self.prefilter_pass.render()

        self.irradiance_pass.setup()
        self.irradiance_pass.environment = self.environment_pass.cubemap
        self.irradiance_pass.render()

        self.brdf_pass.setup()
        self.brdf_pass.render()

        # shadows
        dirlight.shadowpass.setup()
        spotlight.shadowpass.setup()
        pointlight.shadowpass.setup()

        # lighting
        self.lighting_pass.setup()
        self.lighting_pass.irradiance = self.irradiance_pass.irradiance
        self.lighting_pass.prefilter = self.prefilter_pass.prefilter
        self.lighting_pass.brdf = self.brdf_pass.brdflut

        # setup forward rendering
        self.forward_fbo = glGenFramebuffers(1)
        with fbo.bind(self.forward_fbo):
            glDrawBuffers(1, [GL_COLOR_ATTACHMENT0 + 0])
            self.forward_texture = glGenTextures(1)
            glBindTexture(GL_TEXTURE_2D, self.forward_texture)
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, self.width, self.height,
                         0, GL_RGBA, GL_FLOAT, None)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
            glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
                                   GL_TEXTURE_2D, self.forward_texture, 0)
            glBindTexture(GL_TEXTURE_2D, 0)

            # create depth+stencil buffer
            rbo = glGenRenderbuffers(1)
            glBindRenderbuffer(GL_RENDERBUFFER, rbo)
            glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
                                  self.width, self.height)
            glBindRenderbuffer(GL_RENDERBUFFER, 0)

            glFramebufferRenderbuffer(GL_FRAMEBUFFER,
                                      GL_DEPTH_STENCIL_ATTACHMENT,
                                      GL_RENDERBUFFER, rbo)
            assert glCheckFramebufferStatus(
                GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE

        self.skybox_program = program.create(*glsl.read('skybox'))

        # tonemapping
        self.tonemapping_pass.setup()