mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
gg: add the gg.Context.remove_cached_image_by_idx() method (#13206)
This commit is contained in:
parent
ba3308296b
commit
d67be6302b
@ -38,6 +38,10 @@ pub fn (mut ctx Context) get_cached_image_by_idx(image_idx int) &Image {
|
||||
return &ctx.image_cache[image_idx]
|
||||
}
|
||||
|
||||
pub fn (mut ctx Context) remove_cached_image_by_idx(image_idx int) {
|
||||
ctx.image_cache.delete(image_idx)
|
||||
}
|
||||
|
||||
// Draw part of an image using uv coordinates
|
||||
// img_rect is the size and position (in pixels on screen) of the displayed rectangle (ie the draw_image args)
|
||||
// part_rect is the size and position (in absolute pixels in the image) of the wanted part
|
||||
|
41
vlib/gg/testdata/remove_image_from_cache.vv
vendored
Normal file
41
vlib/gg/testdata/remove_image_from_cache.vv
vendored
Normal file
@ -0,0 +1,41 @@
|
||||
module main
|
||||
|
||||
import gg
|
||||
import sokol.gfx
|
||||
|
||||
[console]
|
||||
fn main() {
|
||||
mut context := gg.new_context(
|
||||
frame_fn: frame
|
||||
width: 500
|
||||
height: 500
|
||||
)
|
||||
context.run()
|
||||
}
|
||||
|
||||
fn frame(mut ctx gg.Context) {
|
||||
ctx.begin()
|
||||
id := ctx.new_streaming_image(ctx.width, ctx.height, 4, pixel_format: .rgba8)
|
||||
mut img := ctx.get_cached_image_by_idx(id)
|
||||
mut bytes := []byte{len: img.width * img.height * 4, cap: img.width * img.height * 4}
|
||||
for y in 0 .. img.height {
|
||||
for x in 0 .. img.width {
|
||||
unsafe {
|
||||
bytes[(x + img.width * y) * 4] = 100
|
||||
bytes[(x + img.width * y) * 4 + 1] = 100
|
||||
bytes[(x + img.width * y) * 4 + 2] = 100
|
||||
bytes[(x + img.width * y) * 4 + 3] = 255
|
||||
}
|
||||
}
|
||||
}
|
||||
unsafe {
|
||||
img.update_pixel_data(&bytes[0])
|
||||
}
|
||||
ctx.draw_image(0, 0, ctx.width, ctx.height, img)
|
||||
ctx.remove_cached_image_by_idx(id)
|
||||
ctx.end()
|
||||
gfx.destroy_image(img.simg)
|
||||
unsafe {
|
||||
free(&bytes[0])
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user