package pass import ( "unsafe" "zworld/engine/object/light" "zworld/engine/render/uniform" "zworld/engine/renderapi/color" "zworld/engine/renderapi/descriptor" "zworld/engine/renderapi/texture" ) type ShadowmapLookupFn func(light.T, int) texture.T type LightBuffer struct { buffer []uniform.Light settings uniform.LightSettings } func NewLightBuffer(capacity int) *LightBuffer { return &LightBuffer{ buffer: make([]uniform.Light, 1, capacity+1), // default lighting settings settings: uniform.LightSettings{ AmbientColor: color.White, AmbientIntensity: 0.4, ShadowBias: 0.005, ShadowSampleRadius: 1, ShadowSamples: 1, NormalOffset: 0.1, }, } } func (b *LightBuffer) Flush(desc *descriptor.Storage[uniform.Light]) { // settings is stored in the first element of the buffer // it excludes the first element containing the light settings b.settings.Count = int32(len(b.buffer) - 1) b.buffer[0] = *(*uniform.Light)(unsafe.Pointer(&b.settings)) desc.SetRange(0, b.buffer) } func (b *LightBuffer) Reset() { b.buffer = b.buffer[:1] } func (b *LightBuffer) Store(light uniform.Light) { b.buffer = append(b.buffer, light) }