Exemplo n.º 1
0
 def initializeGL(self):
     glClearColor(0.0, 0.0, 0.0, 0.0)
     for visual in self.visuals:
         visual.init_gl()
     
     # Get AA shader
     fname = os.path.join(os.path.dirname(__file__), 'ddaa.glsl')
     DDAA_SHADER = open(fname , 'rb').read().decode('ascii', 'ignore')
     DDAA_SHADER0, DDAA_SHADER1, DDAA_SHADER2 = DDAA_SHADER.split('='*80)
     self._aaShader =  Shader(None, DDAA_SHADER0)
Exemplo n.º 2
0
    def _pass_ssaa(self, tex, w, h, scale):
        # Select Lanczos kernel based on scale.
        aakernel = [
            None,
            None,
            [
                0.44031130485056913, 0.29880437751590694, 0.04535643028360444,
                -0.06431646022479595
            ],
            [
                0.2797564513818748, 0.2310717037833796, 0.11797652759318597,
                0.01107354293249700
            ],
        ][scale]

        # Prepare for drawing texture to screen
        gl.glClearColor(1, 1, 1, 1)
        gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
        self.setup_scene(0, 0, W, H)
        tex.Enable(0)
        shader = Shader(None, self._shader_code[0])
        shader.bind()
        shader.uniformf('shape', w, h)  # resolution of previous pass
        shader.uniformi('texture', 0)
        if aakernel:
            shader.uniformf('aakernel', *aakernel)

        # Draw texture to screen
        gl.glBegin(gl.GL_QUADS)
        gl.glTexCoord(0, 0)
        gl.glVertex(0, 0)
        gl.glTexCoord(0, 1)
        gl.glVertex(0, 1)
        gl.glTexCoord(1, 1)
        gl.glVertex(1, 1)
        gl.glTexCoord(1, 0)
        gl.glVertex(1, 0)
        gl.glEnd()
        shader.unbind()
        tex.Disable()
Exemplo n.º 3
0
    def _pass_smaa(self, tex):
        # Get precomputed textures
        from smaa_tex import getSearchTex, getAreaTex
        searchTex = RenderTexture(2)
        searchTex.SetData(getSearchTex())
        areaTex = RenderTexture(2)
        areaTex._interpolate = True  # Enforce GL_LINEAR
        areaTex.SetData(getAreaTex())

        # Compose shader code
        bigOne = self._shader_code[-1]
        edgeVertex = bigOne + self._shader_code[0]
        edgeFragment = bigOne + self._shader_code[1]
        blendVertex = bigOne + self._shader_code[2]
        blendFragment = bigOne + self._shader_code[3]
        neighborhoodVertex = bigOne + self._shader_code[4]
        neighborhoodFragment = bigOne + self._shader_code[5]

        if True:  # Pass 1
            fb = fb_edges = FrameBuffer(W, H)
            edgesTex = RenderTexture(2)
            edgesTex.create_empty_texture(W, H)  # Must match depth buffer!
            fb.attach_texture(edgesTex)
            fb.add_depth_buffer()
            #
            fb.enable()
            gl.glClearColor(1, 1, 1, 1)
            gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
            self.setup_scene(0, 0, W, H)
            gl.glDisable(gl.GL_BLEND)
            #
            shader = Shader(edgeVertex, edgeFragment)
            shader.bind()
            tex.Enable(0)
            shader.uniformi('texture', 0)
            gl.glBegin(gl.GL_QUADS)
            gl.glTexCoord(0, 0)
            gl.glVertex(0, 0)
            gl.glTexCoord(0, 1)
            gl.glVertex(0, 1)
            gl.glTexCoord(1, 1)
            gl.glVertex(1, 1)
            gl.glTexCoord(1, 0)
            gl.glVertex(1, 0)
            gl.glEnd()
            fb.disable()
            tex.Disable()
            shader.unbind()

        if True:  # Pass 2
            fb = FrameBuffer(W, H)
            blendTex = RenderTexture(2)
            blendTex.create_empty_texture(W, H)  # Must match depth buffer!
            fb.attach_texture(blendTex)
            fb.add_depth_buffer()
            #
            fb.enable()
            gl.glClearColor(1, 1, 1, 1)
            gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
            self.setup_scene(0, 0, W, H)
            gl.glDisable(gl.GL_BLEND)
            #
            shader = Shader(blendVertex, blendFragment)
            shader.bind()
            edgesTex.Enable(0)
            areaTex.Enable(1)
            searchTex.Enable(2)
            shader.uniformi('edge_tex', 0)
            shader.uniformi('area_tex', 1)
            shader.uniformi('search_tex', 2)
            #
            gl.glBegin(gl.GL_QUADS)
            gl.glTexCoord(0, 0)
            gl.glVertex(0, 0)
            gl.glTexCoord(0, 1)
            gl.glVertex(0, 1)
            gl.glTexCoord(1, 1)
            gl.glVertex(1, 1)
            gl.glTexCoord(1, 0)
            gl.glVertex(1, 0)
            gl.glEnd()
            fb.disable()
            edgesTex.Disable()
            areaTex.Disable()
            searchTex.Disable()
            shader.unbind()

        if True:  # Pass 3
            gl.glClearColor(1, 1, 1, 1)
            gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
            self.setup_scene(0, 0, W, H)
            gl.glDisable(gl.GL_BLEND)
            #
            shader = Shader(neighborhoodVertex, neighborhoodFragment)
            shader.bind()
            tex.Enable(0)
            blendTex.Enable(1)
            shader.uniformi('texture', 0)
            shader.uniformi('blend_tex', 1)
            #
            gl.glBegin(gl.GL_QUADS)
            gl.glTexCoord(0, 0)
            gl.glVertex(0, 0)
            gl.glTexCoord(0, 1)
            gl.glVertex(0, 1)
            gl.glTexCoord(1, 1)
            gl.glVertex(1, 1)
            gl.glTexCoord(1, 0)
            gl.glVertex(1, 0)
            gl.glEnd()
            tex.Disable()
            blendTex.Disable()
            shader.unbind()
Exemplo n.º 4
0
    def _pass_aa(self, tex):
        if self._npasses == 1:
            # Prepare for drawing texture to screen
            gl.glClearColor(1, 1, 1, 1)
            gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
            self.setup_scene(0, 0, W, H)
            tex.Enable(0)
            shader = Shader(None, self._shader_code[0])
            shader.bind()
            shader.uniformf('shape', W, H)
            shader.uniformi('texture', 0)
            # Draw texture to screen
            gl.glBegin(gl.GL_QUADS)
            gl.glTexCoord(0, 0)
            gl.glVertex(0, 0)
            gl.glTexCoord(0, 1)
            gl.glVertex(0, 1)
            gl.glTexCoord(1, 1)
            gl.glVertex(1, 1)
            gl.glTexCoord(1, 0)
            gl.glVertex(1, 0)
            gl.glEnd()
            shader.unbind()
            tex.Disable()
            return

        # We get here only if npasses != 1

        for i in range(self._npasses):
            # Create frame buffer to render to
            fb = fb_edges = FrameBuffer(W, H)
            resultTex = RenderTexture(2)
            resultTex.create_empty_texture(W, H)  # Must match depth buffer!
            fb.attach_texture(resultTex)
            fb.add_depth_buffer()
            fb.enable()
            # Prepare for drawing texture to screen
            gl.glClearColor(1, 1, 1, 1)
            gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
            self.setup_scene(0, 0, W, H)
            tex.Enable(0)
            shader = Shader(None, self._shader_code[0])
            shader.bind()
            shader.uniformf('shape', W, H)
            shader.uniformi('texture', 0)
            # Draw texture to screen
            gl.glBegin(gl.GL_QUADS)
            gl.glTexCoord(0, 0)
            gl.glVertex(0, 0)
            gl.glTexCoord(0, 1)
            gl.glVertex(0, 1)
            gl.glTexCoord(1, 1)
            gl.glVertex(1, 1)
            gl.glTexCoord(1, 0)
            gl.glVertex(1, 0)
            gl.glEnd()
            shader.unbind()
            tex.Disable()
            fb.disable()
            # Prepare for next round
            tex = resultTex

        # Prepare for drawing texture to screen
        gl.glClearColor(1, 1, 1, 1)
        gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
        self.setup_scene(0, 0, W, H)
        tex.Enable(0)
        # Draw texture to screen
        gl.glBegin(gl.GL_QUADS)
        gl.glTexCoord(0, 0)
        gl.glVertex(0, 0)
        gl.glTexCoord(0, 1)
        gl.glVertex(0, 1)
        gl.glTexCoord(1, 1)
        gl.glVertex(1, 1)
        gl.glTexCoord(1, 0)
        gl.glVertex(1, 0)
        gl.glEnd()
        tex.Disable()