app/internal/d3d11: don't track the Backend for a Device

A previous commit removed the assumption that the output framebuffer
is constant across frames. Thus it is no longer necessary to track
and update a backend's current framebuffer when the window is resized.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-03-02 20:44:56 +01:00
parent 25a19481e3
commit fc56d438f3
2 changed files with 8 additions and 13 deletions
+5 -1
View File
@@ -185,6 +185,10 @@ func (d *Device) CreateSwapChain(hwnd windows.Handle) (*SwapChain, error) {
return &SwapChain{swchain: d3dswchain, fbo: &Framebuffer{}}, nil return &SwapChain{swchain: d3dswchain, fbo: &Framebuffer{}}, nil
} }
func (d *Device) BindFramebuffer(fbo *Framebuffer) {
d.ctx.OMSetRenderTargets(fbo.renderTarget, fbo.depthView)
}
func (s *SwapChain) Framebuffer(d *Device) (*Framebuffer, error) { func (s *SwapChain) Framebuffer(d *Device) (*Framebuffer, error) {
if s.fbo.renderTarget != nil { if s.fbo.renderTarget != nil {
return s.fbo, nil return s.fbo, nil
@@ -816,7 +820,7 @@ func (f *Framebuffer) ReadPixels(src image.Rectangle, pixels []byte) error {
func (b *Backend) BindFramebuffer(fbo backend.Framebuffer) { func (b *Backend) BindFramebuffer(fbo backend.Framebuffer) {
b.fbo = fbo.(*Framebuffer) b.fbo = fbo.(*Framebuffer)
b.dev.ctx.OMSetRenderTargets(b.fbo.renderTarget, b.fbo.depthView) b.dev.BindFramebuffer(b.fbo)
} }
func (f *Framebuffer) Invalidate() { func (f *Framebuffer) Invalidate() {
+3 -12
View File
@@ -11,7 +11,6 @@ type d3d11Context struct {
win *window win *window
swchain *d3d11.SwapChain swchain *d3d11.SwapChain
fbo *d3d11.Framebuffer fbo *d3d11.Framebuffer
backend backend.Device
*d3d11.Device *d3d11.Device
width, height int width, height int
} }
@@ -36,13 +35,7 @@ func init() {
} }
func (c *d3d11Context) Backend() (backend.Device, error) { func (c *d3d11Context) Backend() (backend.Device, error) {
backend, err := d3d11.NewBackend(c.Device) return d3d11.NewBackend(c.Device)
if err != nil {
return nil, err
}
c.backend = backend
c.backend.BindFramebuffer(c.fbo)
return backend, nil
} }
func (c *d3d11Context) Present() error { func (c *d3d11Context) Present() error {
@@ -65,7 +58,7 @@ func (c *d3d11Context) Present() error {
func (c *d3d11Context) MakeCurrent() error { func (c *d3d11Context) MakeCurrent() error {
_, width, height := c.win.HWND() _, width, height := c.win.HWND()
if c.fbo != nil && width == c.width && height == c.height { if c.fbo != nil && width == c.width && height == c.height {
c.backend.BindFramebuffer(c.fbo) c.BindFramebuffer(c.fbo)
return nil return nil
} }
if c.fbo != nil { if c.fbo != nil {
@@ -82,9 +75,7 @@ func (c *d3d11Context) MakeCurrent() error {
return err return err
} }
c.fbo = fbo c.fbo = fbo
if c.backend != nil { c.BindFramebuffer(c.fbo)
c.backend.BindFramebuffer(c.fbo)
}
return nil return nil
} }