zworld/engine/renderapi/descriptor/sampler.go
2024-01-14 22:56:06 +08:00

70 lines
1.5 KiB
Go

package descriptor
import (
"fmt"
"zworld/engine/renderapi/device"
"zworld/engine/renderapi/texture"
"github.com/vkngwrapper/core/v2/core1_0"
"github.com/vkngwrapper/extensions/v2/ext_descriptor_indexing"
)
type Sampler struct {
Stages core1_0.ShaderStageFlags
binding int
sampler core1_0.Sampler
view core1_0.ImageView
set Set
}
var _ Descriptor = &Sampler{}
func (d *Sampler) Initialize(device device.T) {}
func (d *Sampler) String() string {
return fmt.Sprintf("Sampler:%d", d.binding)
}
func (d *Sampler) Destroy() {}
func (d *Sampler) Bind(set Set, binding int) {
d.set = set
d.binding = binding
}
func (d *Sampler) Set(tex texture.T) {
d.sampler = tex.Ptr()
d.view = tex.View().Ptr()
d.write()
}
func (d *Sampler) LayoutBinding(binding int) core1_0.DescriptorSetLayoutBinding {
d.binding = binding
return core1_0.DescriptorSetLayoutBinding{
Binding: binding,
DescriptorType: core1_0.DescriptorTypeCombinedImageSampler,
DescriptorCount: 1,
StageFlags: core1_0.ShaderStageFlags(d.Stages),
}
}
func (d *Sampler) BindingFlags() ext_descriptor_indexing.DescriptorBindingFlags { return 0 }
func (d *Sampler) write() {
d.set.Write(core1_0.WriteDescriptorSet{
DstSet: d.set.Ptr(),
DstBinding: d.binding,
DstArrayElement: 0,
DescriptorType: core1_0.DescriptorTypeCombinedImageSampler,
ImageInfo: []core1_0.DescriptorImageInfo{
{
Sampler: d.sampler,
ImageView: d.view,
ImageLayout: core1_0.ImageLayoutShaderReadOnlyOptimal,
},
},
})
}