70 lines
1.5 KiB
Go
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,
|
|
},
|
|
},
|
|
})
|
|
}
|