mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-05 09:25:38 +00:00
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:
@@ -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() {
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user