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
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)
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
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"))
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)
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"))
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)
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)
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"))
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'))
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)
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"))
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)
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),
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)
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))
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()