@@ -30,45 +30,89 @@ function render.stack( pass )
3030 if winamp_info .repeatval == 1 then render .led ( pass , " amp_led_repeat" ) end
3131
3232 -- color sliders
33- -- NOTE Add EQ sliders
3433 render .tint_slider ( pass , " amp_slider_vol" , " amp_slider_vol_bg" )
3534 render .tint_slider ( pass , " amp_slider_pan" , " amp_slider_pan_bg" )
3635
37- -- NOTE test render khz
38- font :setPixelDensity ( metrics .pixel_density_khz )
39- local x , y , z = controls [ " amp_lcd_khz_bg" ].pos :unpack ()
40- local dx , dy , dz = controls [ " amp_lcd_khz_bg" ].dim :unpack ()
41- local tex = controls [ " amp_lcd_khz_bg" ].tex
42- local tex_pass = controls [ " amp_lcd_khz_bg" ].pass
36+ -- small lcds
37+ render .small_lcd ( pass , " amp_lcd_khz_bg" , winamp_info .track_khz )
38+ render .small_lcd ( pass , " amp_lcd_kbps_bg" , winamp_info .track_kbps )
4339
44- tex_pass :reset ()
45- tex_pass :setProjection ( 1 , mat4 ():orthographic ( tex_pass :getDimensions () ) )
46- tex_pass :setColor ( 0 , 1 , 0 , 1 )
47- local tdx , tdy = tex :getDimensions ()
48- tex_pass :text ( tostring ( winamp_info .track_khz ), tdx / 2 , tdy / 2 , 0 , 1 )
49- pass :setMaterial ( tex )
40+ -- track lcd
41+ render .track_lcd ( pass )
42+
43+ -- mono/stereo labels
44+ font :setPixelDensity ( metrics .pixel_density_monostereo )
45+ local col1 , col2 = { 0.8 , 0.8 , 0.8 }, { 0 , 1 , 0 }
46+ if winamp_info .mono_stereo == 1 then
47+ col1 , col2 = col2 , col1
48+ end
49+
50+ render .label ( pass , " amp_label_mono" , col1 , " mono" )
51+ render .label ( pass , " amp_label_stereo" , col2 , " stereo" )
52+
53+ -- main lcd
54+ render .main_lcd (pass )
55+ end
56+
57+ function render .led ( pass , led_id )
58+ local parent = controls [ led_id ].parent
59+ local x , y , z = controls [ led_id ].pos :unpack ()
60+ local px , py , pz = controls [ parent ].model :getNodePosition ( parent )
61+ local dx , dy , dz = controls [ led_id ].dim :unpack ()
62+ pass :setColor ( 0 , 1 , 0 )
63+ pass :plane ( x , y , pz + 0.0026 , dx , dy )
64+ end
65+
66+ function render .tint_slider ( pass , slider_id , bg_id )
67+ local min = controls [ slider_id ].min
68+ local max = controls [ slider_id ].max
69+ local val , y , z = controls [ slider_id ].model :getNodePosition ( slider_id )
70+ local t = (val - min ) / (max - min )
71+
72+ if slider_id == " amp_slider_pan" then
73+ t = math.abs ( 2 * t - 1 );
74+ end
75+
76+ local R = t
77+ local G = 1 - t
78+ local B = 0
79+
80+
81+ local x , y , z = controls [ bg_id ].pos :unpack ()
82+ local dx , dy , dz = controls [ bg_id ].dim :unpack ()
83+ pass :setColor ( R , G , B , 1 )
5084 pass :plane ( x , y , z + 0.001 , dx , dy )
51- pass :setMaterial ()
52- passes [ # passes + 1 ] = tex_pass
85+ pass :setColor ( 1 , 1 , 1 , 1 )
86+ end
87+
88+ function render .set_environment ( pass )
89+ pass :setFaceCull ( " back" )
90+ pass :setBlendMode ()
91+ pass :skybox ( skybox )
92+ pass :setShader ( shader )
93+ pass :send ( " cubemap" , environmentMap )
94+ pass :send ( " sphericalHarmonics" , sphericalHarmonics )
95+ end
5396
54- -- NOTE test render kbps
55- font :setPixelDensity ( metrics .pixel_density_kbps )
56- local x , y , z = controls [ " amp_lcd_kbps_bg " ].pos :unpack ()
57- local dx , dy , dz = controls [ " amp_lcd_kbps_bg " ].dim :unpack ()
58- local tex = controls [ " amp_lcd_kbps_bg " ].tex
59- local tex_pass = controls [ " amp_lcd_kbps_bg " ].pass
97+ function render . small_lcd ( pass , id , info )
98+ font :setPixelDensity ( metrics .pixel_density_small_lcd )
99+ local x , y , z = controls [ id ].pos :unpack ()
100+ local dx , dy , dz = controls [ id ].dim :unpack ()
101+ local tex = controls [ id ].tex
102+ local tex_pass = controls [ id ].pass
60103
61104 tex_pass :reset ()
62105 tex_pass :setProjection ( 1 , mat4 ():orthographic ( tex_pass :getDimensions () ) )
63106 tex_pass :setColor ( 0 , 1 , 0 , 1 )
64107 local tdx , tdy = tex :getDimensions ()
65- tex_pass :text ( tostring ( winamp_info . track_kbps ), tdx / 2 , tdy / 2 , 0 , 1 )
108+ tex_pass :text ( tostring ( info ), tdx / 2 , tdy / 2 , 0 , 1 )
66109 pass :setMaterial ( tex )
67110 pass :plane ( x , y , z + 0.001 , dx , dy )
68111 pass :setMaterial ()
69112 passes [ # passes + 1 ] = tex_pass
113+ end
70114
71- -- NOTE test get song title
115+ function render . track_lcd ( pass )
72116 local hwnd = find_window ( " Winamp v1.x" , nil )
73117 local text_length = user32 .GetWindowTextLengthA ( hwnd )
74118 local buffer_size = text_length + 1
@@ -108,43 +152,10 @@ function render.stack( pass )
108152 pass :plane ( x , y , z + 0.001 , dx , dy )
109153 pass :setMaterial ()
110154 passes [ # passes + 1 ] = tex_pass
155+ end
111156
112- -- NOTE test render label
113- font :setPixelDensity ( metrics .pixel_density_monostereo )
114- local col1 , col2 = { 0.8 , 0.8 , 0.8 }, { 0 , 1 , 0 }
115- if winamp_info .mono_stereo == 1 then
116- col1 , col2 = col2 , col1
117- end
118-
119- local x1 , y1 , z1 = controls [ " amp_label_mono" ].pos :unpack ()
120- local dx1 , dy1 , dz1 = controls [ " amp_label_mono" ].dim :unpack ()
121- local tex1 = controls [ " amp_label_mono" ].tex
122- local tex_pass1 = controls [ " amp_label_mono" ].pass
123- tex_pass1 :reset ()
124- tex_pass1 :setProjection ( 1 , mat4 ():orthographic ( tex_pass1 :getDimensions () ) )
125- tex_pass1 :setColor ( col1 )
126- local tdx1 , tdy1 = tex1 :getDimensions ()
127- tex_pass1 :text ( " mono" , tdx1 / 2 , tdy1 / 2 , 0 , 1 )
128-
129- local x2 , y2 , z2 = controls [ " amp_label_stereo" ].pos :unpack ()
130- local dx2 , dy2 , dz2 = controls [ " amp_label_stereo" ].dim :unpack ()
131- local tex2 = controls [ " amp_label_stereo" ].tex
132- local tex_pass2 = controls [ " amp_label_stereo" ].pass
133- tex_pass2 :reset ()
134- tex_pass2 :setProjection ( 1 , mat4 ():orthographic ( tex_pass2 :getDimensions () ) )
135- tex_pass2 :setColor ( col2 )
136- local tdx2 , tdy2 = tex2 :getDimensions ()
137- tex_pass2 :text ( " stereo" , tdx2 / 2 , tdy2 / 2 , 0 , 1 )
138-
139- pass :setBlendMode ( " alpha" )
140- pass :setShader ()
141- pass :draw ( tex1 , x1 , y1 , z1 + 0.001 , dx1 )
142- passes [ # passes + 1 ] = tex_pass1
143- pass :draw ( tex2 , x2 , y2 , z2 + 0.001 , dx2 )
144- passes [ # passes + 1 ] = tex_pass2
145-
146- -- NOTE test render main LCD
147- -- font:setPixelDensity( 1 )
157+ function render .main_lcd ( pass )
158+ -- font:setPixelDensity( 1 )
148159 local x , y , z = controls [ " amp_lcd_main_bg" ].pos :unpack ()
149160 local dx , dy , dz = controls [ " amp_lcd_main_bg" ].dim :unpack ()
150161 local tex = controls [ " amp_lcd_main_bg" ].tex
@@ -176,19 +187,19 @@ function render.stack( pass )
176187 end
177188
178189 if winamp_info .playing_state == 1 or winamp_info .playing_state == 3 then
179- -- NOTE test render bars
190+ -- render bars and peaks
180191 tex_pass :setColor ( 1 , 1 , 1 , 1 )
181192
182193 local xoff = 58
183194 local yoff = 0
184- local peak_y = 0
195+ local peaks_y = 0
185196 for i = 1 , 19 do
186197 local val = skin .sa_bars .data [ i ]
187198 tex_pass :setMaterial ( skin .sa_bars [ val ] )
188199 tex_pass :plane ( xoff , 116 , 0 , 12 , 56 )
189200
190- peak_y = skin .sa_bars .peak [ i ].y
191- yoff = map_range ( 1 , 14 , 144 , 88 , peak_y )
201+ peaks_y = skin .sa_bars .peaks [ i ].y
202+ yoff = map_range ( 1 , 14 , 144 , 88 , peaks_y )
192203 tex_pass :setMaterial ()
193204 tex_pass :setColor ( 0.59 , 0.59 , 0.59 , 1 )
194205 tex_pass :plane ( xoff , yoff , 0 , 12 , 4 )
@@ -201,44 +212,21 @@ function render.stack( pass )
201212 passes [ # passes + 1 ] = tex_pass
202213end
203214
204- function render .led ( pass , led_id )
205- local parent = controls [ led_id ].parent
206- local x , y , z = controls [ led_id ].pos :unpack ()
207- local px , py , pz = controls [ parent ].model :getNodePosition ( parent )
208- local dx , dy , dz = controls [ led_id ].dim :unpack ()
209- pass :setColor ( 0 , 1 , 0 )
210- pass :plane ( x , y , pz + 0.0026 , dx , dy )
211- end
212-
213- function render .tint_slider ( pass , slider_id , bg_id )
214- local min = controls [ slider_id ].min
215- local max = controls [ slider_id ].max
216- local val , y , z = controls [ slider_id ].model :getNodePosition ( slider_id )
217- local t = (val - min ) / (max - min )
218-
219- if slider_id == " amp_slider_pan" then
220- t = math.abs ( 2 * t - 1 );
221- end
222-
223- local R = t
224- local G = 1 - t
225- local B = 0
226-
227-
228- local x , y , z = controls [ bg_id ].pos :unpack ()
229- local dx , dy , dz = controls [ bg_id ].dim :unpack ()
230- pass :setColor ( R , G , B , 1 )
231- pass :plane ( x , y , z + 0.001 , dx , dy )
232- pass :setColor ( 1 , 1 , 1 , 1 )
233- end
215+ function render .label ( pass , id , col , str )
216+ local x , y , z = controls [ id ].pos :unpack ()
217+ local dx , dy , dz = controls [ id ].dim :unpack ()
218+ local tex = controls [ id ].tex
219+ local tex_pass = controls [ id ].pass
220+ tex_pass :reset ()
221+ tex_pass :setProjection ( 1 , mat4 ():orthographic ( tex_pass :getDimensions () ) )
222+ tex_pass :setColor ( col )
223+ local tdx , tdy = tex :getDimensions ()
224+ tex_pass :text ( str , tdx / 2 , tdy / 2 , 0 , 1 )
234225
235- function render .set_environment ( pass )
236- pass :setFaceCull ( " back" )
237- pass :setBlendMode ()
238- pass :skybox ( skybox )
239- pass :setShader ( shader )
240- pass :send ( " cubemap" , environmentMap )
241- pass :send ( " sphericalHarmonics" , sphericalHarmonics )
226+ pass :setBlendMode ( " alpha" )
227+ pass :setShader ()
228+ pass :draw ( tex , x , y , z + 0.001 , dx )
229+ passes [ # passes + 1 ] = tex_pass
242230end
243231
244232return render
0 commit comments