From 05136a44ce6e495e5b618e6a06b401964467c469 Mon Sep 17 00:00:00 2001 From: Tristan Rowley Date: Sun, 8 Dec 2019 15:14:46 +0000 Subject: [PATCH] fix bugs in shader selection from my previous commits, can toggle shader layer on/off using midi command 'toggle_shader_layer_X', fix bug when controlling shaders via CC with offset layer --- actions.py | 18 ++++---- .../midi_action_mapping_apckey25.json | 9 ++++ video_centre/shaders.py | 42 ++++++++++++------- 3 files changed, 46 insertions(+), 23 deletions(-) diff --git a/actions.py b/actions.py index de408c1..1cde575 100644 --- a/actions.py +++ b/actions.py @@ -272,13 +272,16 @@ class Actions(object): else: self.message_handler.set_message('INFO', 'cant mirror in dev mode') - def toggle_shaders(self): - if self.shaders.selected_status_list[self.data.shader_layer] == '▶': - self.shaders.stop_selected_shader() - elif self.shaders.selected_status_list[self.data.shader_layer] == '■': - self.shaders.start_selected_shader() + def toggle_shader_layer(self, layer): + if self.shaders.selected_status_list[layer] == '▶': + self.shaders.stop_shader(layer) + elif self.shaders.selected_status_list[layer] == '■': + self.shaders.start_shader(layer) else: - self.message_handler.set_message('INFO', 'no shader loaded') + self.message_handler.set_message('INFO', "no shader loaded into layer %s" % layer) + + def toggle_shaders(self): + self.toggle_shader_layer(self.data.shader_layer) def toggle_shader_speed(self): self.shaders.toggle_shader_speed() @@ -872,7 +875,8 @@ class Actions(object): @property def parserlist(self): return { - ( r"play_shader_([0-9])_([0-9])", self.shaders.play_that_shader ) + ( r"play_shader_([0-9])_([0-9])", self.shaders.play_that_shader ), + ( r"toggle_shader_layer_([0-9])", self.toggle_shader_layer ) } diff --git a/json_objects/midi_action_mapping_apckey25.json b/json_objects/midi_action_mapping_apckey25.json index 05dd7c0..1c0b78d 100644 --- a/json_objects/midi_action_mapping_apckey25.json +++ b/json_objects/midi_action_mapping_apckey25.json @@ -87,6 +87,15 @@ "DEFAULT": ["set_the_shader_param_3_layer_offset_2_continuous"], "NAV_DETOUR": ["set_detour_end_continuous"] }, + "note_on 82": { + "DEFAULT": ["toggle_shader_layer_0"] + }, + "note_on 83": { + "DEFAULT": ["toggle_shader_layer_1"] + }, + "note_on 84": { + "DEFAULT": ["toggle_shader_layer_2"] + }, "note_on 32": { "DEFAULT": ["play_shader_0_0"] diff --git a/video_centre/shaders.py b/video_centre/shaders.py index c396f03..9042858 100644 --- a/video_centre/shaders.py +++ b/video_centre/shaders.py @@ -69,21 +69,30 @@ class Shaders(object): return i return max_amount - def load_selected_shader(self): - selected_shader = self.selected_shader_list[self.data.shader_layer] + def load_shader_layer(self, layer): + selected_shader = self.selected_shader_list[layer] #self.selected_param_list[self.data.shader_layer] = [0.0,0.0,0.0,0.0] print("select shader: ", selected_shader) - self.osc_client.send_message("/shader/{}/load".format(str(self.data.shader_layer)), [selected_shader['path'],selected_shader['shad_type'] == '2in',selected_shader['param_number']]) - if not self.selected_status_list[self.data.shader_layer] == '▶': - self.selected_status_list[self.data.shader_layer] = '■' + self.osc_client.send_message("/shader/{}/load".format(str(layer)), [selected_shader['path'],selected_shader['shad_type'] == '2in',selected_shader['param_number']]) + if not self.selected_status_list[layer] == '▶': + self.selected_status_list[layer] = '■' + + def load_selected_shader(self): + self.load_shader_layer(self.data.shader_layer) + + def start_shader(self, layer): + self.osc_client.send_message("/shader/{}/is_active".format(str(layer)), True) + self.selected_status_list[layer] = '▶' + + def stop_shader(self, layer): + self.osc_client.send_message("/shader/{}/is_active".format(str(layer)), False) + self.selected_status_list[layer] = '■' def start_selected_shader(self): - self.osc_client.send_message("/shader/{}/is_active".format(str(self.data.shader_layer)), True) - self.selected_status_list[self.data.shader_layer] = '▶' + self.start_shader(self.data.shader_layer) def stop_selected_shader(self): - self.osc_client.send_message("/shader/{}/is_active".format(str(self.data.shader_layer)), False) - self.selected_status_list[self.data.shader_layer] = '■' + self.stop_shader(self.data.shader_layer) def map_on_shaders_selection(self): index = self.shaders_menu.selected_list_index @@ -112,13 +121,13 @@ class Shaders(object): self.shaders_menu_list = self.generate_shaders_list() return is_file, is_selected_shader, selected_shader - def play_that_shader(self, bank, slot): - if self.data.shader_bank_data[bank][slot]['path']: - self.selected_shader_list[bank] = self.data.shader_bank_data[bank][slot] - self.selected_shader_list[bank]['slot'] = slot - self.load_selected_shader() + def play_that_shader(self, layer, slot): + if self.data.shader_bank_data[layer][slot]['path']: + self.selected_shader_list[layer] = self.data.shader_bank_data[layer][slot] + self.selected_shader_list[layer]['slot'] = slot + self.load_shader_layer(layer) else: - self.message_handler.set_message('INFO', "shader slot %s:%s is empty"%(bank,slot)) + self.message_handler.set_message('INFO', "shader slot %s:%s is empty"%(layer,slot)) def play_this_shader(self, slot): print(self.data.shader_bank_data[self.data.shader_layer]) @@ -158,7 +167,8 @@ class Shaders(object): if layer_offset is None: start_layer = self.data.shader_layer layer_offset = 0 - layer = start_layer + layer_offset % 4 + layer = (start_layer + layer_offset) % 3 #4 + print ("got transposed layer %s" % layer) if self.data.settings['shader']['X3_AS_SPEED']['value'] == 'enabled' and param == 3: self.set_speed_to_amount(amount, layout_offset=layout_offset) else: