package tgraph import ( "github.com/vkngwrapper/core/v2/core1_0" "zworld/engine/render/uniform" "zworld/engine/renderapi/cache" "zworld/engine/renderapi/descriptor" "zworld/engine/renderapi/material" "zworld/engine/renderapi/renderpass" "zworld/engine/renderapi/shader" "zworld/engine/renderapi/vertex" "zworld/engine/renderapi/vulkan" ) type MatCache struct { app vulkan.App pass renderpass.T frames int } func NewMaterialCache(app vulkan.App, pass renderpass.T, frames int) MaterialCache { return cache.New[*material.Def, []Material](&MatCache{ app: app, pass: pass, frames: frames, }) } func (m *MatCache) Name() string { return "DepthMaterials" } func (m *MatCache) Instantiate(def *material.Def, callback func([]Material)) { if def == nil { def = &material.Def{} } desc := &BasicDescriptors{ Camera: &descriptor.Uniform[uniform.Camera]{ Stages: core1_0.StageAll, }, Objects: &descriptor.Storage[uniform.Object]{ Stages: core1_0.StageAll, Size: 2000, }, } // read vertex pointers from vertex format pointers := vertex.ParsePointers(def.VertexFormat) // fetch shader from cache shader := m.app.Shaders().Fetch(shader.NewRef("depth")) // create material mat := material.New( m.app.Device(), material.Args{ Shader: shader, Pass: m.pass, Subpass: MainSubpass, Pointers: pointers, CullMode: vertex.CullBack, DepthTest: true, DepthWrite: true, DepthFunc: core1_0.CompareOpLess, DepthClamp: def.DepthClamp, Primitive: def.Primitive, }, desc) instances := make([]Material, m.frames) for i := range instances { instance := mat.Instantiate(m.app.Pool()) bm := &BasicMaterial{ //id: def.Hash(), Instance: instance, Objects: NewObjectBuffer(desc.Objects.Size), Meshes: m.app.Meshes(), } bm.SetID(def.Hash()) instances[i] = bm } callback(instances) } func (m *MatCache) Destroy() { } func (m *MatCache) Delete(mat []Material) { mat[0].Destroy() }