andy speed boost
This commit is contained in:
parent
5f101d776b
commit
740e3520f5
@ -14,6 +14,7 @@ import png
|
||||
import numpy as np
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
|
||||
# get screen size from parameters
|
||||
Nx = 80
|
||||
@ -55,7 +56,7 @@ class Layer:
|
||||
self.rgb_buffer_length = (self.png_width * self.png_height) * self.color_values
|
||||
self.layer_buffer_current_color = np.zeros(self.color_values, np.uint8)
|
||||
self.layer_buffer_array = np.zeros(self.rgb_buffer_length, np.uint8)
|
||||
self.png_image_data_flatten = self.flatten_rgb_array_from_png(self.png_image_data)
|
||||
self.png_image_data_flatten = np.array(self.flatten_rgb_array_from_png(self.png_image_data))
|
||||
# internal event states
|
||||
self.layer_current_event_value = 0
|
||||
self.animation_finished = True
|
||||
@ -124,19 +125,15 @@ class Layer:
|
||||
return output_rgb_array
|
||||
|
||||
def render_rgb_layer(self, r=0, g=0, b=0):
|
||||
# reset layer buffer, step by number of color values (default 3, rgb)
|
||||
for i in range(0, self.rgb_buffer_length):
|
||||
self.layer_buffer_array[i] = 0
|
||||
# set new rgb values, step by number of color values (default 3, rgb)
|
||||
for i in range(0, self.rgb_buffer_length, self.color_values):
|
||||
# check for every r g b value if current brightness map value is not equal to zero
|
||||
# if true to mapping, else ignore and keep it at zero (black)
|
||||
if self.png_image_data_flatten[i] != 0:
|
||||
self.layer_buffer_array[i] = self.get_new_color_value(r, self.png_image_data_flatten[i])
|
||||
if self.png_image_data_flatten[i + 1] != 0:
|
||||
self.layer_buffer_array[i + 1] = self.get_new_color_value(g, self.png_image_data_flatten[i + 1])
|
||||
if self.png_image_data_flatten[i + 2] != 0:
|
||||
self.layer_buffer_array[i + 2] = self.get_new_color_value(b, self.png_image_data_flatten[i + 2])
|
||||
def dolayer(color, channel):
|
||||
if color == 0:
|
||||
self.layer_buffer_array[channel::3] *= 0
|
||||
else:
|
||||
im = (color * (self.png_image_data_flatten[channel::3].astype(np.uint16)))
|
||||
self.layer_buffer_array[channel::3] = (im/255).astype(np.uint8)
|
||||
dolayer(r, 0)
|
||||
dolayer(g, 1)
|
||||
dolayer(b, 2)
|
||||
|
||||
# helper method to calculate new color value
|
||||
# based on current value and target mapping value
|
||||
@ -302,10 +299,11 @@ def get_higher_color_value(value1, value2):
|
||||
|
||||
|
||||
def merge_layer_arrays(layer_first, layer_second):
|
||||
output_array = np.zeros(buffer_length, np.uint8)
|
||||
for idx in range(0, buffer_length):
|
||||
output_array[idx] = get_higher_color_value(layer_first[idx], layer_second[idx])
|
||||
return output_array
|
||||
return np.maximum(layer_first, layer_second)
|
||||
# output_array = np.zeros(buffer_length, np.uint8)
|
||||
# for idx in range(0, buffer_length):
|
||||
# output_array[idx] = get_higher_color_value(layer_first[idx], layer_second[idx])
|
||||
# return output_array
|
||||
|
||||
|
||||
def get_merged_layers_array():
|
||||
@ -344,13 +342,13 @@ if __name__ == "__main__":
|
||||
wst.start()
|
||||
|
||||
# frame refresh time limit, default ~16ms for about ~60fps
|
||||
frame_update_limit_ms = 16
|
||||
frame_last_update_ms = millis()
|
||||
frame_current_millis = millis()
|
||||
frame_update_limit_ms = 0.016
|
||||
frame_last_update_ms = time.time()
|
||||
frame_current_millis = time.time()
|
||||
|
||||
# Start layer logic loop
|
||||
while True:
|
||||
frame_current_millis = millis()
|
||||
frame_current_millis = time.time()
|
||||
if frame_current_millis - frame_last_update_ms >= frame_update_limit_ms:
|
||||
# run layer render logic
|
||||
layer_small.run()
|
||||
@ -363,4 +361,7 @@ if __name__ == "__main__":
|
||||
# convert frame buffer to byte string and write to stdout
|
||||
os.write(1, output_buffer.tobytes())
|
||||
# refresh last frame update time
|
||||
frame_last_update_ms = millis()
|
||||
frame_last_update_ms = time.time()
|
||||
else:
|
||||
time.sleep((frame_last_update_ms+frame_update_limit_ms)-frame_current_millis)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user