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)
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)
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)
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)