mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-04 17:05:38 +00:00
gpu,gpu/backend: don't assume constant output framebuffer
Return the output framebuffer from BeginFrame, to make it clear that it may change between frames. Delete CurrentFramebuffer which is no longer needed. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -274,7 +274,8 @@ func NewBackend(d *Device) (*Backend, error) {
|
||||
return b, nil
|
||||
}
|
||||
|
||||
func (b *Backend) BeginFrame() {
|
||||
func (b *Backend) BeginFrame() backend.Framebuffer {
|
||||
return b.currentFramebuffer()
|
||||
}
|
||||
|
||||
func (b *Backend) EndFrame() {
|
||||
@@ -368,13 +369,13 @@ func (b *Backend) NewTexture(format backend.TextureFormat, width, height int, mi
|
||||
return &Texture{backend: b, format: d3dfmt, tex: tex, sampler: sampler, resView: resView, bindings: bindings, width: width, height: height}, nil
|
||||
}
|
||||
|
||||
func (b *Backend) CurrentFramebuffer() backend.Framebuffer {
|
||||
func (b *Backend) currentFramebuffer() backend.Framebuffer {
|
||||
renderTarget := b.dev.ctx.OMGetRenderTargets()
|
||||
if renderTarget != nil {
|
||||
// Assume someone else is holding on to it.
|
||||
_IUnknownRelease(unsafe.Pointer(renderTarget), renderTarget.vtbl.Release)
|
||||
}
|
||||
if renderTarget == b.fbo.renderTarget {
|
||||
if b.fbo != nil && renderTarget == b.fbo.renderTarget {
|
||||
return b.fbo
|
||||
}
|
||||
return &Framebuffer{dev: b.dev, renderTarget: renderTarget, foreign: true}
|
||||
@@ -823,7 +824,7 @@ func (f *Framebuffer) Invalidate() {
|
||||
|
||||
func (f *Framebuffer) Release() {
|
||||
if f.foreign {
|
||||
panic("cannot release Framebuffer from CurrentFramebuffer")
|
||||
panic("framebuffer not created by NewBuffer")
|
||||
}
|
||||
if f.renderTarget != nil {
|
||||
_IUnknownRelease(unsafe.Pointer(f.renderTarget), f.renderTarget.vtbl.Release)
|
||||
|
||||
Reference in New Issue
Block a user