Ejemplo n.º 1
0
    def __init__(self,
                    win,
                    contrast=1.0,
                    gamma=[1.0,1.0,1.0],
                    nEntries=256,
                    mode='bits++',):
        self.win = win
        self.contrast=contrast
        self.nEntries=nEntries
        #set standardised name for mode
        if mode in ['bits','bits++']:
            self.mode = 'bits++'
        elif mode in ['color','color++','colour','colour++']:
            self.mode = 'color++'
        elif mode in ['mono','mono++']:
            self.mode = 'mono++'
        else:
            logging.error("Unknown mode '%s' for BitsBox" %mode)

        if len(gamma)>2: # [Lum,R,G,B] or [R,G,B]
            self.gamma=gamma[-3:]
        else:
            self.gamma = [gamma, gamma, gamma]

        if init():
            setVideoMode(NOGAMMACORRECT|VIDEOENCODEDCOMMS)
            self.initialised=True
            logging.debug('found and initialised bits++')
        else:
            self.initialised=False
            logging.warning("couldn't initialise bits++")

        if self.mode == 'bits++':
            #do the processing
            self._HEADandLUT = numpy.zeros((524,1,3),numpy.uint8)
            self._HEADandLUT[:12,:,0] = numpy.asarray([ 36, 63, 8, 211, 3, 112, 56, 34,0,0,0,0]).reshape([12,1])#R
            self._HEADandLUT[:12,:,1] = numpy.asarray([ 106, 136, 19, 25, 115, 68, 41, 159,0,0,0,0]).reshape([12,1])#G
            self._HEADandLUT[:12,:,2] = numpy.asarray([ 133, 163, 138, 46, 164, 9, 49, 208,0,0,0,0]).reshape([12,1])#B
            self.LUT=numpy.zeros((256,3),'d')#just a place holder
            self.setLUT()#this will set self.LUT and update self._LUTandHEAD
        elif haveShaders:
            self.monoModeShader = shaders.compileProgram(fragment=shaders.bitsMonoModeFrag,
                                   attachments=[shaders.gammaCorrectionFrag])
            self.colorModeShader =shaders.compileProgram(fragment=shaders.bitsColorModeFrag,
                                   attachments=[shaders.gammaCorrectionFrag])
            GL.glUseProgram(self.colorModeShader)
            prog = self.colorModeShader
            GL.glUniform1f(GL.glGetUniformLocation(prog, 'sampleSpacing'), 1.0)
            #Set default encoding gamma for power-law shader to (1.0, 1.0, 1.0):
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMEncodingGamma'), 1.0, 1.0, 1.0)
            # Default min and max luminance is 0.0 to 1.0, therefore reciprocal 1/range is also 1.0:
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMMinInLuminance'), 0.0, 0.0, 0.0)
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMMaxInLuminance'), 1.0, 1.0, 1.0)
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMReciprocalLuminanceRange'), 1.0, 1.0, 1.0)
            # Default gain to postmultiply is 1.0:
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMOutputGain'), 1.0, 1.0, 1.0)
            # Default bias to is 0.0:
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMOutputBias'), 0.0, 0.0, 0.0)
            GL.glUniform2f(GL.glGetUniformLocation(prog, 'ICMClampToColorRange'), 0.0, 1.0)
            GL.glUseProgram(0)
Ejemplo n.º 2
0
 def _setupShaders(self):
     """creates and stores the shader programs needed for mono++ and color++ modes
     """
     if not haveShaders:
         return
     self._shaders={}
     self._shaders['mono++'] = shaders.compileProgram(shaders.vertSimple,
         shaders.bitsMonoModeFrag)
     self._shaders['color++'] = shaders.compileProgram(shaders.vertSimple,
         shaders.bitsColorModeFrag)
Ejemplo n.º 3
0
 def _setupShaders(self):
     """creates and stores the shader programs needed for mono++ and color++ modes
     """
     if not haveShaders:
         return
     self._shaders = {}
     self._shaders['mono++'] = shaders.compileProgram(
         shaders.vertSimple, shaders.bitsMonoModeFrag)
     self._shaders['color++'] = shaders.compileProgram(
         shaders.vertSimple, shaders.bitsColorModeFrag)
Ejemplo n.º 4
0
    def __init__(
        self,
        win,
        contrast=1.0,
        gamma=[1.0, 1.0, 1.0],
        nEntries=256,
        mode='bits++',
    ):
        self.win = win
        self.contrast = contrast
        self.nEntries = nEntries
        #set standardised name for mode
        if mode in ['bits', 'bits++']:
            self.mode = 'bits++'
        elif mode in ['color', 'color++', 'colour', 'colour++']:
            self.mode = 'color++'
        elif mode in ['mono', 'mono++']:
            self.mode = 'mono++'
        else:
            logging.error("Unknown mode '%s' for BitsBox" % mode)

        if len(gamma) > 2:  # [Lum,R,G,B] or [R,G,B]
            self.gamma = gamma[-3:]
        else:
            self.gamma = [gamma, gamma, gamma]

        if init():
            setVideoMode(NOGAMMACORRECT | VIDEOENCODEDCOMMS)
            self.initialised = True
            logging.debug('found and initialised bits++')
        else:
            self.initialised = False
            logging.warning("couldn't initialise bits++")

        if self.mode == 'bits++':
            #do the processing
            self._HEADandLUT = numpy.zeros((524, 1, 3), numpy.uint8)
            self._HEADandLUT[:12, :, 0] = numpy.asarray(
                [36, 63, 8, 211, 3, 112, 56, 34, 0, 0, 0, 0]).reshape([12,
                                                                       1])  #R
            self._HEADandLUT[:12, :, 1] = numpy.asarray(
                [106, 136, 19, 25, 115, 68, 41, 159, 0, 0, 0,
                 0]).reshape([12, 1])  #G
            self._HEADandLUT[:12, :, 2] = numpy.asarray(
                [133, 163, 138, 46, 164, 9, 49, 208, 0, 0, 0,
                 0]).reshape([12, 1])  #B
            self.LUT = numpy.zeros((256, 3), 'd')  #just a place holder
            self.setLUT()  #this will set self.LUT and update self._LUTandHEAD
        elif haveShaders:
            self.monoModeShader = shaders.compileProgram(
                fragment=shaders.bitsMonoModeFrag,
                attachments=[shaders.gammaCorrectionFrag])
            self.colorModeShader = shaders.compileProgram(
                fragment=shaders.bitsColorModeFrag,
                attachments=[shaders.gammaCorrectionFrag])
            GL.glUseProgram(self.colorModeShader)
            prog = self.colorModeShader
            GL.glUniform1f(GL.glGetUniformLocation(prog, 'sampleSpacing'), 1.0)
            #Set default encoding gamma for power-law shader to (1.0, 1.0, 1.0):
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMEncodingGamma'),
                           1.0, 1.0, 1.0)
            # Default min and max luminance is 0.0 to 1.0, therefore reciprocal 1/range is also 1.0:
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMMinInLuminance'),
                           0.0, 0.0, 0.0)
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMMaxInLuminance'),
                           1.0, 1.0, 1.0)
            GL.glUniform3f(
                GL.glGetUniformLocation(prog, 'ICMReciprocalLuminanceRange'),
                1.0, 1.0, 1.0)
            # Default gain to postmultiply is 1.0:
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMOutputGain'), 1.0,
                           1.0, 1.0)
            # Default bias to is 0.0:
            GL.glUniform3f(GL.glGetUniformLocation(prog, 'ICMOutputBias'), 0.0,
                           0.0, 0.0)
            GL.glUniform2f(
                GL.glGetUniformLocation(prog, 'ICMClampToColorRange'), 0.0,
                1.0)
            GL.glUseProgram(0)