1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package renderer
import "core:log"
import bk "../backend"
Depth_Buffer :: struct {
texture: bk.Texture_Handle,
}
create_depth_buffer :: proc(b: ^bk.Backend, width, height: u32) -> (db: Depth_Buffer, ok: bool) {
depth_fmt := b.get_depth_format()
tex, tex_ok := b.create_image(bk.Texture_Desc{
width = width,
height = height,
format = depth_fmt,
usage = {.Depth_Stencil_Attachment},
})
if !tex_ok {
log.error("gpu/renderer: failed to create depth image")
return {}, false
}
if !b.create_image_view(tex, depth_fmt, {.Depth}) {
b.destroy_image(tex)
log.error("gpu/renderer: failed to create depth image view")
return {}, false
}
db.texture = tex
return db, true
}
destroy_depth_buffer :: proc(b: ^bk.Backend, db: ^Depth_Buffer) {
b.destroy_image(db.texture)
}
recreate_depth_buffer :: proc(b: ^bk.Backend, db: ^Depth_Buffer, width, height: u32) -> bool {
destroy_depth_buffer(b, db)
new_db, ok := create_depth_buffer(b, width, height)
if !ok {
return false
}
db^ = new_db
return true
}