diff --git a/app/internal/d3d11/backend_windows.go b/app/internal/d3d11/backend_windows.go index 40ddb503..2753b673 100644 --- a/app/internal/d3d11/backend_windows.go +++ b/app/internal/d3d11/backend_windows.go @@ -279,7 +279,12 @@ func NewBackend(d *Device) (*Backend, error) { } func (b *Backend) BeginFrame() backend.Framebuffer { - return b.currentFramebuffer() + renderTarget := b.dev.ctx.OMGetRenderTargets() + if renderTarget != nil { + // Assume someone else is holding on to it. + _IUnknownRelease(unsafe.Pointer(renderTarget), renderTarget.vtbl.Release) + } + return &Framebuffer{dev: b.dev, renderTarget: renderTarget, foreign: true} } func (b *Backend) EndFrame() { @@ -373,18 +378,6 @@ 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 { - renderTarget := b.dev.ctx.OMGetRenderTargets() - if renderTarget != nil { - // Assume someone else is holding on to it. - _IUnknownRelease(unsafe.Pointer(renderTarget), renderTarget.vtbl.Release) - } - if b.fbo != nil && renderTarget == b.fbo.renderTarget { - return b.fbo - } - return &Framebuffer{dev: b.dev, renderTarget: renderTarget, foreign: true} -} - func (b *Backend) NewFramebuffer(tex backend.Texture, depthBits int) (backend.Framebuffer, error) { d3dtex := tex.(*Texture) if d3dtex.bindings&backend.BufferBindingFramebuffer == 0 { @@ -828,7 +821,7 @@ func (f *Framebuffer) Invalidate() { func (f *Framebuffer) Release() { if f.foreign { - panic("framebuffer not created by NewBuffer") + panic("framebuffer not created by NewFramebuffer") } if f.renderTarget != nil { _IUnknownRelease(unsafe.Pointer(f.renderTarget), f.renderTarget.vtbl.Release) diff --git a/gpu/gl/backend.go b/gpu/gl/backend.go index 83d72239..443e4693 100644 --- a/gpu/gl/backend.go +++ b/gpu/gl/backend.go @@ -170,7 +170,8 @@ func NewBackend(ctx Context) (*Backend, error) { func (b *Backend) BeginFrame() backend.Framebuffer { // Assume GL state is reset between frames. b.state = glstate{} - return b.currentFramebuffer() + fboID := glimpl.Framebuffer(b.funcs.GetBinding(glimpl.FRAMEBUFFER_BINDING)) + return &gpuFramebuffer{backend: b, obj: fboID, foreign: true} } func (b *Backend) EndFrame() { @@ -229,11 +230,6 @@ func (b *Backend) NewFramebuffer(tex backend.Texture, depthBits int) (backend.Fr return fbo, nil } -func (b *Backend) currentFramebuffer() backend.Framebuffer { - fboID := glimpl.Framebuffer(b.funcs.GetBinding(glimpl.FRAMEBUFFER_BINDING)) - return &gpuFramebuffer{backend: b, obj: fboID, foreign: true} -} - func (b *Backend) NewTexture(format backend.TextureFormat, width, height int, minFilter, magFilter backend.TextureFilter, binding backend.BufferBinding) (backend.Texture, error) { glErr(b.funcs) tex := &gpuTexture{backend: b, obj: b.funcs.CreateTexture(), width: width, height: height} @@ -803,7 +799,7 @@ func (f *gpuFramebuffer) Invalidate() { func (f *gpuFramebuffer) Release() { if f.foreign { - panic("framebuffer not created by NewBuffer") + panic("framebuffer not created by NewFramebuffer") } f.backend.funcs.DeleteFramebuffer(f.obj) if f.hasDepth {