mirror of
https://github.com/cyberboy666/r_e_c_u_r.git
synced 2025-12-05 16:00:06 +01:00
wip new shader banks feature
This commit is contained in:
50
actions.py
50
actions.py
@@ -73,10 +73,12 @@ class Actions(object):
|
||||
def enter_on_shaders_selection(self):
|
||||
##want to select shader if its not selected, and want to enter 'param' mode if it already is
|
||||
is_shader, is_selected_shader, selected_shader = self.shaders.enter_on_shaders_selection()
|
||||
print('is selected shader: {}'.format(is_selected_shader))
|
||||
if is_selected_shader and selected_shader['param_number'] > 0:
|
||||
self.set_shader_param_mode()
|
||||
|
||||
def map_on_shaders_selection(self):
|
||||
self.shaders.map_on_shaders_selection()
|
||||
|
||||
def clear_all_slots(self):
|
||||
self.data.clear_all_slots()
|
||||
self.display.browser_menu.generate_browser_list()
|
||||
@@ -301,6 +303,48 @@ class Actions(object):
|
||||
self.data.detour_settings['is_playing'] = is_playing
|
||||
self.video_driver.osc_client.send_message("/detour/is_playing", is_playing)
|
||||
|
||||
def play_shader_0(self):
|
||||
self.play_this_shader(0)
|
||||
|
||||
def play_shader_1(self):
|
||||
self.play_this_shader(1)
|
||||
|
||||
def play_shader_2(self):
|
||||
self.play_this_shader(2)
|
||||
|
||||
def play_shader_3(self):
|
||||
self.play_this_shader(3)
|
||||
|
||||
def play_shader_4(self):
|
||||
self.play_this_shader(4)
|
||||
|
||||
def play_shader_5(self):
|
||||
self.play_this_shader(5)
|
||||
|
||||
def play_shader_6(self):
|
||||
self.play_this_shader(6)
|
||||
|
||||
def play_shader_7(self):
|
||||
self.play_this_shader(7)
|
||||
|
||||
def play_shader_8(self):
|
||||
self.play_this_shader(8)
|
||||
|
||||
def play_shader_9(self):
|
||||
self.play_this_shader(9)
|
||||
|
||||
def play_this_shader(self, number):
|
||||
self.shaders.play_this_shader(number)
|
||||
|
||||
def previous_shader_layer(self):
|
||||
self.data.update_shader_layer_by_amount(-1)
|
||||
|
||||
def next_shader_layer(self):
|
||||
self.data.update_shader_layer_by_amount(1)
|
||||
|
||||
def clear_shader_bank(self):
|
||||
self.data.clear_all_shader_slots()
|
||||
|
||||
def toggle_detour_record(self):
|
||||
if self.data.settings['detour']['TRY_DEMO']['value'] == 'enabled':
|
||||
is_recording = not self.data.detour_settings['is_recording']
|
||||
@@ -605,10 +649,10 @@ class Actions(object):
|
||||
self.shaders.decrease_this_param(self.data.settings['shader']['SHADER_PARAM']['value'])
|
||||
|
||||
def increase_param_focus(self):
|
||||
self.shaders.focused_param = (self.shaders.focused_param + 1)%self.shaders.selected_shader['param_number']
|
||||
self.shaders.focused_param = (self.shaders.focused_param + 1)%self.shaders.selected_shader_list[self.data.shader_layer]['param_number']
|
||||
|
||||
def decrease_param_focus(self):
|
||||
self.shaders.focused_param = (self.shaders.focused_param - 1)%self.shaders.selected_shader['param_number']
|
||||
self.shaders.focused_param = (self.shaders.focused_param - 1)%self.shaders.selected_shader_list[self.data.shader_layer]['param_number']
|
||||
|
||||
def increase_shader_param(self):
|
||||
options = self.data.settings['shader']['SHADER_PARAM']['options']
|
||||
|
||||
@@ -13,6 +13,7 @@ from omxplayer.player import OMXPlayer
|
||||
class Data(object):
|
||||
|
||||
BANK_DATA_JSON = 'display_data.json'
|
||||
SHADER_BANK_DATA_JSON = 'shader_bank_data.json'
|
||||
SETTINGS_JSON = 'settings.json'
|
||||
DEFAULT_SETTINGS_JSON = 'settings_default.json'
|
||||
KEYPAD_MAPPING_JSON = 'keypad_action_mapping.json'
|
||||
@@ -42,17 +43,25 @@ class Data(object):
|
||||
self.update_screen = True
|
||||
self.confirm_action = None
|
||||
self.player_mode = 'now'
|
||||
|
||||
self.detour_active = False
|
||||
self.detour_mix_shaders = self.get_list_of_two_input_shaders()
|
||||
self.detour_settings = collections.OrderedDict([('current_detour',0), ('is_playing', False), ('is_recording', False), ('record_loop', False), ('detour_size', False), ('detour_speed', 0), ('memory_full', False), ('mix_shader', self.detour_mix_shaders[0]), ('detour_position', 5), ('detour_start', 0), ('detour_end', 0), ('detour_mix', 0), ('is_delay', False)])
|
||||
|
||||
self.next_bankslot = '0-0'
|
||||
self.current_bankslot = '0-0'
|
||||
|
||||
self.shader_layer = 0
|
||||
self.shader_slots = [None, None, None]
|
||||
|
||||
### persisted data (use default if doesnt exits):
|
||||
self.bank_data = [self.create_empty_bank()]
|
||||
if os.path.isfile(self.PATH_TO_DATA_OBJECTS + self.BANK_DATA_JSON):
|
||||
self.bank_data = self._read_json(self.BANK_DATA_JSON)
|
||||
|
||||
self.next_bankslot = '0-0'
|
||||
self.current_bankslot = '0-0'
|
||||
self.shader_bank_data = [self.create_empty_shader_bank() for i in range(3)]
|
||||
if os.path.isfile(self.PATH_TO_DATA_OBJECTS + self.SHADER_BANK_DATA_JSON):
|
||||
self.shader_bank_data = self._read_json(self.SHADER_BANK_DATA_JSON)
|
||||
|
||||
self.settings = self._read_json(self.DEFAULT_SETTINGS_JSON)
|
||||
if os.path.isfile(self.PATH_TO_DATA_OBJECTS + self.SETTINGS_JSON):
|
||||
@@ -70,6 +79,11 @@ class Data(object):
|
||||
empty_slot = dict(name='', location='', length=-1, start=-1, end=-1, rate=1)
|
||||
return [empty_slot for i in range(10)]
|
||||
|
||||
@staticmethod
|
||||
def create_empty_shader_bank():
|
||||
empty_slot = dict(name='', path='', param_number=4, shad_type='-')
|
||||
return [empty_slot for i in range(10)]
|
||||
|
||||
def _read_json(self, file_name):
|
||||
with open(self.PATH_TO_DATA_OBJECTS + file_name) as data_file:
|
||||
data = json.load(data_file)
|
||||
@@ -104,6 +118,8 @@ class Data(object):
|
||||
if setting_key == setting_name:
|
||||
return folder_key, setting_key, setting_item
|
||||
|
||||
##### setting and adding to sample mapping ######
|
||||
|
||||
def create_new_slot_mapping_in_first_open(self, file_name):
|
||||
######## used for mapping current video to next available slot ########
|
||||
for index, slot in enumerate(self.bank_data[self.bank_number]):
|
||||
@@ -149,6 +165,33 @@ class Data(object):
|
||||
self.next_bankslot = '{}-{}'.format(self.bank_number,new_value)
|
||||
return True
|
||||
|
||||
######## setting and adding to shader mapping
|
||||
|
||||
|
||||
def create_new_shader_mapping_in_first_open(self, file_name):
|
||||
######## used for mapping current shader to next available slot ########
|
||||
for index, slot in enumerate(self.shader_bank_data[self.shader_layer]):
|
||||
if (not slot['name']):
|
||||
self.create_new_shader_mapping(index, file_name)
|
||||
return True
|
||||
return False
|
||||
|
||||
def create_new_shader_mapping(self, slot_number, file_name):
|
||||
######## used for mapping current shader to a specific slot ########
|
||||
has_location, location = self._get_path_for_file(file_name)
|
||||
print('file_name:{},has_location:{}, location:{}'.format(file_name,has_location, location))
|
||||
new_slot = dict(name=file_name, path=location, shad_type='-', param_number=4)
|
||||
self._update_a_shader_slots_data(slot_number, new_slot)
|
||||
|
||||
def clear_all_shader_slots(self):
|
||||
self.shader_bank_data[self.shader_layer] = self.create_empty_shader_bank()
|
||||
self._update_json(self.SHADER_BANK_DATA_JSON, self.shader_bank_data)
|
||||
|
||||
def update_shader_layer_by_amount(self, amount):
|
||||
self.shader_layer = (self.shader_layer + amount) % len(self.shader_bank_data)
|
||||
|
||||
|
||||
|
||||
def update_setting_value(self, setting_folder, setting_name, setting_value):
|
||||
self.settings[setting_folder][setting_name]['value'] = setting_value
|
||||
self._update_json(self.SETTINGS_JSON, self.settings)
|
||||
@@ -277,7 +320,7 @@ class Data(object):
|
||||
|
||||
def _get_path_for_file(self, file_name):
|
||||
######## returns full path for a given file name ########
|
||||
for path in self.PATHS_TO_BROWSER:
|
||||
for path in self.PATHS_TO_BROWSER + self.PATHS_TO_SHADERS:
|
||||
for root, dirs, files in os.walk(path):
|
||||
if file_name in files:
|
||||
return True, '{}/{}'.format(root, file_name)
|
||||
@@ -316,6 +359,8 @@ class Data(object):
|
||||
display_modes = [[ "SAMPLER",'PLAYER'], ["BROWSER",'NAV_BROWSER'],["SETTINGS",'NAV_SETTINGS']]
|
||||
if self.settings['video']['VIDEOPLAYER_BACKEND']['value'] != 'omxplayer' and self.settings['shader']['USE_SHADER']['value'] == 'enabled':
|
||||
display_modes.append(["SHADERS",'NAV_SHADERS'])
|
||||
if self.settings['shader']['USE_SHADER_BANK']['value'] == 'enabled' and ["SHADERS",'NAV_SHADERS'] in display_modes:
|
||||
display_modes.append(["SHADBANK",'PLAY_SHADER'])
|
||||
if self.settings['detour']['TRY_DEMO']['value'] == 'enabled':
|
||||
display_modes.append(["FRAMES",'NAV_DETOUR'])
|
||||
if not with_nav_mode:
|
||||
@@ -332,6 +377,11 @@ class Data(object):
|
||||
self.bank_data[self.bank_number][slot_number] = slot_info
|
||||
self._update_json(self.BANK_DATA_JSON, self.bank_data)
|
||||
|
||||
def _update_a_shader_slots_data(self, slot_number, slot_info):
|
||||
######## overwrite a given slots info with new data ########
|
||||
self.shader_bank_data[self.shader_layer][slot_number] = slot_info
|
||||
self._update_json(self.SHADER_BANK_DATA_JSON, self.shader_bank_data)
|
||||
|
||||
@staticmethod
|
||||
def make_empty_if_none(input):
|
||||
if input is None:
|
||||
|
||||
@@ -52,7 +52,7 @@ class Display(object):
|
||||
self.display_text.pack()
|
||||
|
||||
def _load_title(self):
|
||||
if self.data.display_mode == 'SHADERS':
|
||||
if self.data.display_mode == 'SHADERS' or self.data.display_mode == 'SHADBANK':
|
||||
self.display_text.insert(END, self.TITLES[1] + ' \n')
|
||||
self.display_text.tag_add("TITLE", 1.19, 1.31)
|
||||
elif self.data.display_mode == 'FRAMES':
|
||||
@@ -88,6 +88,8 @@ class Display(object):
|
||||
self._load_sampler()
|
||||
elif self.data.display_mode == 'SHADERS':
|
||||
self._load_shaders()
|
||||
elif self.data.display_mode == 'SHADBANK':
|
||||
self._load_shader_bank()
|
||||
elif self.data.display_mode == 'FRAMES':
|
||||
self._load_detour()
|
||||
self.display_text.tag_add("DISPLAY_MODE", 4.19, 4.29)
|
||||
@@ -167,10 +169,10 @@ class Display(object):
|
||||
self.display_text.insert(END, '{} \n'.format(self.body_title))
|
||||
|
||||
## showing current shader info:
|
||||
shader = self.shaders.selected_shader
|
||||
self.display_text.insert(END, '{:<1}:{:<1}{:<2} {:<17} '.format \
|
||||
shader = self.shaders.selected_shader_list[self.data.shader_layer]
|
||||
self.display_text.insert(END, '{:<1}:{:<2} {:<17} '.format \
|
||||
(self.shaders.selected_status,shader['shad_type'][0], \
|
||||
format(shader['shad_index'],'02d'), shader['name'].lstrip()[0:17] ))
|
||||
shader['name'].lstrip()[0:17] ))
|
||||
for i in range(min(4,shader['param_number'])):
|
||||
display_param = self.format_param_value(self.shaders.selected_param_values[i])
|
||||
if display_param == 100:
|
||||
@@ -194,6 +196,34 @@ class Display(object):
|
||||
if self.data.control_mode == "SHADER_PARAM":
|
||||
self._highlight_this_param(self.shaders.focused_param)
|
||||
|
||||
def _load_shader_bank(self):
|
||||
shader_bank_data = self.data.shader_bank_data[self.data.shader_layer]
|
||||
|
||||
self.display_text.insert(END, '{} \n'.format(self.body_title))
|
||||
|
||||
self.display_text.insert(END, '{:>6} {:<5} {:<5} '.format(
|
||||
'{}-layer'.format(self.data.shader_layer), 'name', 'type'))
|
||||
|
||||
shader = self.shaders.selected_shader_list[self.data.shader_layer]
|
||||
|
||||
for i in range(min(4,shader['param_number'])):
|
||||
display_param = self.format_param_value(self.shaders.selected_param_values[i])
|
||||
if display_param == 100:
|
||||
display_param == 99
|
||||
self.display_text.insert(END, 'x{}:{:02d}'.format(i, display_param))
|
||||
self.display_text.insert(END, '\n')
|
||||
|
||||
for index, slot in enumerate(shader_bank_data):
|
||||
name_without_extension = slot['name'].rsplit('.',1)[0]
|
||||
self.display_text.insert(END, '{:^6} {:<17} {:<5} \n'.format(index, name_without_extension[0:17], slot['shad_type']))
|
||||
if index % 2:
|
||||
self.display_text.tag_add("ZEBRA_STRIPE", self.ROW_OFFSET + index,
|
||||
self.ROW_OFFSET + self.SELECTOR_WIDTH + index)
|
||||
# highlight the slot of the selected player
|
||||
current_slot = self.data.shader_slots[self.data.shader_layer]
|
||||
if current_slot:
|
||||
self._highlight_this_row(current_slot)
|
||||
|
||||
|
||||
def _load_detour(self):
|
||||
line_count = 0
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
"NAV_SHADERS": ["move_shaders_selection_up"],
|
||||
"LENGTH_SET": ["return_to_default_control_mode"],
|
||||
"CONFIRM": ["return_to_default_control_mode"],
|
||||
"SHADER_PARAM": ["decrease_this_param", "decrease_shader_param"]
|
||||
"SHADER_PARAM": ["decrease_this_param", "decrease_shader_param"],
|
||||
"PLAY_SHADER": ["decrease_this_param", "decrease_shader_param"]
|
||||
},
|
||||
"b": {
|
||||
"NAV_BROWSER": ["move_browser_selection_down"],
|
||||
@@ -15,13 +16,15 @@
|
||||
"NAV_SHADERS": ["move_shaders_selection_down"],
|
||||
"LENGTH_SET": ["return_to_default_control_mode"],
|
||||
"CONFIRM": ["return_to_default_control_mode"],
|
||||
"SHADER_PARAM": ["increase_this_param", "increase_shader_param"]
|
||||
"SHADER_PARAM": ["increase_this_param", "increase_shader_param"],
|
||||
"PLAY_SHADER": ["increase_this_param", "increase_shader_param"]
|
||||
|
||||
},
|
||||
"c": {
|
||||
"NAV_BROWSER": ["enter_on_browser_selection"],
|
||||
"DEFAULT": ["toggle_action_on_player","toggle_show_on_player"],
|
||||
"NAV_SETTINGS": ["enter_on_settings_selection"],
|
||||
"NAV_SHADERS": ["enter_on_shaders_selection"],
|
||||
"NAV_SHADERS": ["enter_on_shaders_selection", "map_on_shaders_selection"],
|
||||
"LENGTH_SET": ["record_fixed_length"],
|
||||
"SHADER_PARAM": ["return_to_default_control_mode"],
|
||||
"CONFIRM": ["perform_confirm_action"],
|
||||
@@ -34,11 +37,13 @@
|
||||
"e": {
|
||||
"DEFAULT": ["set_playing_sample_start_to_current_duration", "clear_playing_sample_start_time"],
|
||||
"SHADER_PARAM": ["decrease_param_focus"],
|
||||
"PLAY_SHADER": ["decrease_param_focus"],
|
||||
"NAV_DETOUR": ["decrease_mix_shader"]
|
||||
},
|
||||
"f": {
|
||||
"DEFAULT": ["set_playing_sample_end_to_current_duration", "clear_playing_sample_end_time"],
|
||||
"SHADER_PARAM": ["increase_param_focus"],
|
||||
"PLAY_SHADER": ["increase_param_focus"],
|
||||
"NAV_DETOUR": ["increase_mix_shader"]
|
||||
},
|
||||
"g": {
|
||||
@@ -51,36 +56,47 @@
|
||||
},
|
||||
"j": {
|
||||
"DEFAULT": ["load_slot_0_into_next_player","previous_bank"],
|
||||
"PLAY_SHADER": ["play_shader_0","previous_shader_layer"],
|
||||
"NAV_DETOUR": ["switch_to_detour_0", "set_the_detour_mix_0"]
|
||||
},
|
||||
"k": {
|
||||
"DEFAULT": ["load_slot_1_into_next_player","next_bank"],
|
||||
"PLAY_SHADER": ["play_shader_1","next_shader_layer"],
|
||||
"NAV_DETOUR": ["switch_to_detour_1", "set_the_detour_mix_1"]
|
||||
},
|
||||
"l": {
|
||||
"DEFAULT": ["load_slot_2_into_next_player","clear_all_slots"],
|
||||
"PLAY_SHADER": ["play_shader_2","clear_shader_bank"],
|
||||
"NAV_DETOUR": ["switch_to_detour_2", "clear_this_detour"]
|
||||
},
|
||||
"m": {
|
||||
"DEFAULT": ["load_slot_3_into_next_player"],
|
||||
"PLAY_SHADER": ["play_shader_3"],
|
||||
"NAV_DETOUR": ["switch_to_detour_3"]
|
||||
},
|
||||
"n": {
|
||||
"DEFAULT": ["load_slot_4_into_next_player"]
|
||||
"DEFAULT": ["load_slot_4_into_next_player"],
|
||||
"PLAY_SHADER": ["play_shader_4"]
|
||||
},
|
||||
"o": {
|
||||
"DEFAULT": ["load_slot_5_into_next_player","toggle_screen_mirror"]
|
||||
"DEFAULT": ["load_slot_5_into_next_player","toggle_screen_mirror"],
|
||||
"PLAY_SHADER": ["play_shader_5"]
|
||||
},
|
||||
"p": {
|
||||
"DEFAULT": ["load_slot_6_into_next_player","toggle_shaders"]
|
||||
"DEFAULT": ["load_slot_6_into_next_player","toggle_shaders"],
|
||||
"PLAY_SHADER": ["play_shader_6","toggle_shaders"]
|
||||
},
|
||||
"q": {
|
||||
"DEFAULT": ["load_slot_7_into_next_player", "toggle_detour_mode"]
|
||||
"DEFAULT": ["load_slot_7_into_next_player", "toggle_detour_mode"],
|
||||
"PLAY_SHADER": ["play_shader_7","toggle_detour_mode"]
|
||||
},
|
||||
"r": {
|
||||
"DEFAULT": ["load_slot_8_into_next_player"]
|
||||
"DEFAULT": ["load_slot_8_into_next_player"],
|
||||
"PLAY_SHADER": ["play_shader_8"]
|
||||
},
|
||||
"s": {
|
||||
"DEFAULT": ["load_slot_9_into_next_player","confirm_shutdown"]
|
||||
}
|
||||
"DEFAULT": ["load_slot_9_into_next_player","confirm_shutdown"],
|
||||
"PLAY_SHADER":
|
||||
["play_shader_9","confirm_shutdown"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,6 +170,14 @@
|
||||
],
|
||||
"value": "enabled"
|
||||
},
|
||||
"USE_SHADER_BANK": {
|
||||
"action": "update_capture_settings",
|
||||
"options": [
|
||||
"enabled",
|
||||
"disabled"
|
||||
],
|
||||
"value": "disabled"
|
||||
},
|
||||
"X3_AS_SPEED": {
|
||||
"action": null,
|
||||
"options": [
|
||||
|
||||
188
json_objects/shader_bank_data.json
Normal file
188
json_objects/shader_bank_data.json
Normal file
@@ -0,0 +1,188 @@
|
||||
[
|
||||
[
|
||||
{
|
||||
"name": "wipe.frag",
|
||||
"param_number": 4,
|
||||
"path": "/home/pi/r_e_c_u_r/Shaders/2-input/wipe.frag",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"name": "add_mix.frag",
|
||||
"param_number": 4,
|
||||
"path": "/home/pi/r_e_c_u_r/Shaders/2-input/add_mix.frag",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
},
|
||||
{
|
||||
"name": "",
|
||||
"param_number": 4,
|
||||
"path": "",
|
||||
"shad_type": "-"
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -4,14 +4,14 @@ import os
|
||||
|
||||
class Shaders(object):
|
||||
MENU_HEIGHT = 10
|
||||
EMPTY_SHADER = dict(name='none',is_shader=True,shad_type='-',param_number=0,path='-',shad_index=0)
|
||||
EMPTY_SHADER = dict(name='none',is_shader=True,shad_type='-',param_number=4,path='-')
|
||||
def __init__(self, root, osc_client, message_handler, data):
|
||||
self.root = root
|
||||
self.osc_client = osc_client
|
||||
self.message_handler = message_handler
|
||||
self.data = data
|
||||
self.shaders_menu = menu.ShadersMenu(self.data, self.message_handler, self.MENU_HEIGHT )
|
||||
self.selected_shader = self.EMPTY_SHADER
|
||||
self.selected_shader_list = [self.EMPTY_SHADER for i in range(3)]
|
||||
self.focused_param = None
|
||||
self.shaders_menu_list = self.generate_shaders_list()
|
||||
if self.shaders_menu_list is not None:
|
||||
@@ -24,18 +24,17 @@ class Shaders(object):
|
||||
def generate_shaders_list(self):
|
||||
shaders_menu_list = []
|
||||
raw_list = self.shaders_menu.generate_raw_shaders_list()
|
||||
shad_i = 0
|
||||
for line in raw_list:
|
||||
if line['is_shader']:
|
||||
stripped_name = line['name'].lstrip()
|
||||
has_path, path = self.get_path_for_shader(stripped_name)
|
||||
shad_type = self.determine_shader_type(path)
|
||||
parameter_number = self.determine_shader_parameter_number(path)
|
||||
#print('shader index is {}'.format(shad_i))
|
||||
shaders_menu_list.append(dict(name=line['name'],is_shader=True,shad_type=shad_type,param_number=parameter_number,path=path,shad_index=shad_i))
|
||||
shad_i = shad_i +1
|
||||
|
||||
shaders_menu_list.append(dict(name=line['name'],is_shader=True,shad_type=shad_type,param_number=parameter_number,path=path))
|
||||
|
||||
else:
|
||||
shaders_menu_list.append(dict(name=line['name'],is_shader=False,shad_type='',param_number=None,path=None,shad_index=None))
|
||||
shaders_menu_list.append(dict(name=line['name'],is_shader=False,shad_type='',param_number=None,path=None))
|
||||
return shaders_menu_list
|
||||
|
||||
|
||||
@@ -48,7 +47,6 @@ class Shaders(object):
|
||||
return False, ''
|
||||
|
||||
def determine_shader_type(self, path):
|
||||
#try:
|
||||
with open(path, 'r', errors='ignore') as selected_shader:
|
||||
shader_text = selected_shader.read()
|
||||
if '//0-input' in shader_text:
|
||||
@@ -59,9 +57,7 @@ class Shaders(object):
|
||||
return '2in'
|
||||
else:
|
||||
return '-'
|
||||
#except Exception as e:
|
||||
#self.message_handler.set_message('INFO', 'cannot inspect shader text')
|
||||
#return '-'
|
||||
|
||||
|
||||
def determine_shader_parameter_number(self, path):
|
||||
max_amount = 4
|
||||
@@ -75,33 +71,51 @@ class Shaders(object):
|
||||
return max_amount
|
||||
|
||||
def load_selected_shader(self):
|
||||
selected_shader = self.selected_shader_list[self.data.shader_layer]
|
||||
self.selected_param_values = [0.0,0.0,0.0,0.0]
|
||||
self.osc_client.send_message("/shader/load", [self.selected_shader['path'],self.selected_shader['shad_type'] == '2in',self.selected_shader['param_number']])
|
||||
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 == '▶':
|
||||
self.selected_status = '■'
|
||||
|
||||
def start_selected_shader(self):
|
||||
self.osc_client.send_message("/shader/start", True)
|
||||
self.osc_client.send_message("/shader/start".format(str(self.data.shader_layer)), True)
|
||||
self.selected_status = '▶'
|
||||
|
||||
def stop_selected_shader(self):
|
||||
self.osc_client.send_message("/shader/stop", True)
|
||||
self.osc_client.send_message("/shader/stop".format(str(self.data.shader_layer)), True)
|
||||
self.selected_status = '■'
|
||||
|
||||
def map_on_shaders_selection(self):
|
||||
index = self.shaders_menu.selected_list_index
|
||||
is_file, name = self.shaders_menu.extract_file_type_and_name_from_menu_format(
|
||||
self.shaders_menu_list[index]['name'])
|
||||
if is_file:
|
||||
is_successful = self.data.create_new_shader_mapping_in_first_open(name)
|
||||
if not is_successful:
|
||||
self.message_handler.set_message('INFO', 'current bank is full')
|
||||
else:
|
||||
self.message_handler.set_message('INFO', 'can not map folder')
|
||||
|
||||
def enter_on_shaders_selection(self):
|
||||
selected_shader = self.selected_shader_list[self.data.shader_layer]
|
||||
index = self.shaders_menu.selected_list_index
|
||||
is_file, name = self.shaders_menu.extract_file_type_and_name_from_menu_format(
|
||||
self.shaders_menu_list[index]['name'])
|
||||
is_selected_shader = False
|
||||
if is_file and name == self.selected_shader['name'].lstrip():
|
||||
if is_file and name == selected_shader['name'].lstrip():
|
||||
is_selected_shader = True
|
||||
elif is_file:
|
||||
self.selected_shader = self.shaders_menu_list[index]
|
||||
self.selected_shader_list[self.data.shader_layer] = self.shaders_menu_list[index]
|
||||
self.load_selected_shader()
|
||||
else:
|
||||
self.shaders_menu.update_open_folders(name)
|
||||
self.shaders_menu_list = self.generate_shaders_list()
|
||||
return is_file, is_selected_shader, self.selected_shader
|
||||
return is_file, is_selected_shader, selected_shader
|
||||
|
||||
def play_this_shader(self, slot):
|
||||
self.selected_shader_list[self.data.shader_layer] = self.data.shader_bank_data[self.data.shader_layer][slot]
|
||||
self.load_selected_shader()
|
||||
|
||||
def increase_this_param(self, amount_change):
|
||||
param = self.focused_param
|
||||
@@ -126,8 +140,8 @@ class Shaders(object):
|
||||
|
||||
def set_param_to_amount(self, param, amount):
|
||||
if self.data.settings['shader']['X3_AS_SPEED']['value'] == 'enabled' and param == 3:
|
||||
self.osc_client.send_message("/shader/speed", [param, amount] )
|
||||
self.osc_client.send_message("/shader/{}/speed".format(str(self.data.shader_layer)), [param, amount] )
|
||||
else:
|
||||
self.osc_client.send_message("/shader/param", [param, amount] )
|
||||
self.osc_client.send_message("/shader/{}/param".format(str(self.data.shader_layer)), [param, amount] )
|
||||
self.selected_param_values[param] = amount
|
||||
|
||||
|
||||
Reference in New Issue
Block a user