Skip to content

Commit 7cc2911

Browse files
committed
multiple textures for sprite bundle
1 parent 8928680 commit 7cc2911

File tree

1 file changed

+28
-20
lines changed

1 file changed

+28
-20
lines changed

src/service/render.lua

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,24 @@ end
143143

144144
-- todo: update mutiple images
145145
local update_image
146+
146147
local 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
151166
end
@@ -224,17 +239,18 @@ end
224239
function 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
239255
end
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

Comments
 (0)