Esempio n. 1
0
 def configShader(self):
     """Set uniforms in current GPU program"""
     if self.bayer:
         shader = gpu.getProgram()
         h = gpu.getUniform(shader, "sourceSize")
         glUniform4f(h, self.vid.w, self.vid.h, 1.0/self.vid.w, 1.0/self.vid.h)
         h = gpu.getUniform(shader, "firstRed")
         # This is the RGGB ordering that works with Elphel
         glUniform2f(h, 1, 0)
 def initShaders(self):
     gpu.init()
     # Flat shader used for overlays
     stdVert = gpu.loadShaderFile(GL_VERTEX_SHADER, "std_vert.glsl",
             ["#version 120"])
     flatFrag = gpu.loadShaderFile(GL_FRAGMENT_SHADER, "flat_frag.glsl")
     self.flatShader = gpu.newProgram(stdVert, flatFrag)
     # The video shaders vary depending on the source
     # format (Bayer or non) and output (RGB or red-blue)
     # Could recompile shaders on the fly as the output
     # changes, but easier to generate all variations here
     ## RGB shader just uses image as texture
     rgbFrag = gpu.loadShaderFile(
             GL_FRAGMENT_SHADER, "video_frag.glsl",
             ["#version 120"])
     self.rgbVideo = gpu.newProgram(stdVert, rgbFrag)
     h = gpu.getUniform(self.rgbVideo, "image")
     glUniform1i(h, 0)   # Always GL_TEXTURE0
     # RGB anaglyph shader
     rgbAnaglyphFrag = gpu.loadShaderFile(
             GL_FRAGMENT_SHADER, "video_frag.glsl",
             ["#version 120", "#define ANAGLYPH"])
     self.rgbAnaglyphVideo = gpu.newProgram(stdVert, rgbAnaglyphFrag)
     h = gpu.getUniform(self.rgbAnaglyphVideo, "image")
     glUniform1i(h, 0)
     ## Bayer demosaic versions
     bayerVert = gpu.loadShaderFile(GL_VERTEX_SHADER, "std_vert.glsl",
             ["#version 120", "#define DEBAYER"])
     bayerFrag = gpu.loadShaderFile(
             GL_FRAGMENT_SHADER, "video_frag.glsl",
             ["#version 120", "#define DEBAYER"])
     self.bayerVideo = gpu.newProgram(bayerVert, bayerFrag)
     h = gpu.getUniform(self.bayerVideo, "image")
     glUniform1i(h, 0)
     bayerAnaglyphFrag = gpu.loadShaderFile(
             GL_FRAGMENT_SHADER, "video_frag.glsl",
             ["#version 120", "#define DEBAYER", "#define ANAGLYPH"])
     self.bayerAnaglyphVideo = gpu.newProgram(bayerVert, bayerAnaglyphFrag)
     h = gpu.getUniform(self.bayerAnaglyphVideo, "image")
     glUniform1i(h, 0)