Harbor

branch main
showing the latest snapshot on main
depth.odin 1.0 KB · Plain text
renderer/depth.odin 0644 Raw
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
}