59 lines
1.0 KiB
Go
59 lines
1.0 KiB
Go
|
|
package sync
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
|
||
|
|
"zworld/engine/renderapi/device"
|
||
|
|
|
||
|
|
"github.com/vkngwrapper/core/v2/core1_0"
|
||
|
|
"github.com/vkngwrapper/core/v2/driver"
|
||
|
|
)
|
||
|
|
|
||
|
|
type Semaphore interface {
|
||
|
|
device.Resource[core1_0.Semaphore]
|
||
|
|
Name() string
|
||
|
|
}
|
||
|
|
|
||
|
|
type semaphore struct {
|
||
|
|
device device.T
|
||
|
|
ptr core1_0.Semaphore
|
||
|
|
name string
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewSemaphore(dev device.T, name string) Semaphore {
|
||
|
|
ptr, _, err := dev.Ptr().CreateSemaphore(nil, core1_0.SemaphoreCreateInfo{})
|
||
|
|
if err != nil {
|
||
|
|
panic(err)
|
||
|
|
}
|
||
|
|
dev.SetDebugObjectName(driver.VulkanHandle(ptr.Handle()), core1_0.ObjectTypeSemaphore, name)
|
||
|
|
|
||
|
|
return &semaphore{
|
||
|
|
device: dev,
|
||
|
|
ptr: ptr,
|
||
|
|
name: name,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s semaphore) Ptr() core1_0.Semaphore {
|
||
|
|
return s.ptr
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *semaphore) Name() string {
|
||
|
|
return s.name
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *semaphore) Destroy() {
|
||
|
|
if s.ptr != nil {
|
||
|
|
s.ptr.Destroy(nil)
|
||
|
|
s.ptr = nil
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewSemaphoreArray(dev device.T, name string, count int) []Semaphore {
|
||
|
|
arr := make([]Semaphore, count)
|
||
|
|
for i := range arr {
|
||
|
|
arr[i] = NewSemaphore(dev, fmt.Sprintf("%s:%d", name, i))
|
||
|
|
}
|
||
|
|
return arr
|
||
|
|
}
|