143143
144144-- todo: update mutiple images
145145local update_image
146+
146147local function delay_update_image (imgmem )
147148 function update_image ()
148- STATE .textures [1 ]:update (imgmem )
149+ local from = imgmem .from
150+ for i = 1 , # imgmem do
151+ local tid = from + i
152+ local tex = STATE .textures [tid ]
153+ if tex == nil then
154+ local texture_size = setting .texture_size
155+ tex = render .image {
156+ width = texture_size ,
157+ height = texture_size ,
158+ }
159+ STATE .textures [tid ] = tex
160+ STATE .views [tid ] = render .view { texture = tex }
161+ end
162+ tex :update (imgmem [i ])
163+ end
149164 update_image = nil
150165 end
151166end
@@ -224,17 +239,18 @@ end
224239function S .load_sprites (name )
225240 local loader = ltask .uniqueservice " loader"
226241 local spr = ltask .call (loader , " loadbundle" , name )
227- local rects = ltask .call (loader , " pack" )
228- -- todo : load multiple textures
229- local rect = rects [1 ]
230-
231- local imgmem = image .new (setting .texture_size , setting .texture_size )
232- local canvas = imgmem :canvas ()
233- for id , v in pairs (rect ) do
234- local src = image .canvas (v .data , v .w , v .h , v .stride )
235- image .blit (canvas , src , v .x , v .y )
242+ local rects , from = ltask .call (loader , " pack" )
243+ local imgmems = { from = from }
244+ for i = 1 , # rects do
245+ local imgmem = image .new (setting .texture_size , setting .texture_size )
246+ local canvas = imgmem :canvas ()
247+ for id , v in pairs (rects [i ]) do
248+ local src = image .canvas (v .data , v .w , v .h , v .stride )
249+ image .blit (canvas , src , v .x , v .y )
250+ end
251+ imgmems [i ] = imgmem
236252 end
237- delay_update_image (imgmem )
253+ delay_update_image (imgmems )
238254 return spr
239255end
240256
@@ -243,11 +259,6 @@ local function render_init(arg)
243259
244260 local texture_size = setting .texture_size
245261
246- local img = render .image {
247- width = texture_size ,
248- height = texture_size ,
249- }
250-
251262 local inst_buffer = render .buffer {
252263 type = " vertex" ,
253264 usage = " stream" ,
@@ -269,7 +280,6 @@ local function render_init(arg)
269280 pixel_format = " R8" ,
270281 }
271282 local views = {
272- [1 ] = render .view { texture = img },
273283 storage = render .view { storage = sr_buffer },
274284 font = render .view { texture = font_texture },
275285 }
@@ -280,14 +290,13 @@ local function render_init(arg)
280290 swapchain = true ,
281291 },
282292 default_sampler = render .sampler { label = " texquad-sampler" },
283- textures = { img } ,
293+ textures = {} ,
284294 font_texture = font_texture ,
285295 views = views ,
286296 }
287297 local bindings = render .bindings ()
288298 bindings :vbuffer (0 , inst_buffer )
289299 bindings :view (0 , views .storage )
290- bindings :view (1 , views [1 ])
291300 bindings :sampler (0 , STATE .default_sampler )
292301
293302 STATE .inst = assert (inst_buffer )
@@ -323,7 +332,6 @@ local function render_init(arg)
323332
324333 maskbind :vbuffer (0 , STATE .mask_inst )
325334 maskbind :view (0 , views .storage )
326- maskbind :view (1 , views [1 ])
327335 maskbind :sampler (0 , STATE .default_sampler )
328336
329337 STATE .mask_bindings = maskbind
0 commit comments