diff --git a/app/internal/d3d11/backend_windows.go b/app/internal/d3d11/backend_windows.go index 2753b673..c0d820b8 100644 --- a/app/internal/d3d11/backend_windows.go +++ b/app/internal/d3d11/backend_windows.go @@ -279,12 +279,15 @@ func NewBackend(d *Device) (*Backend, error) { } func (b *Backend) BeginFrame() backend.Framebuffer { - renderTarget := b.dev.ctx.OMGetRenderTargets() + renderTarget, depthView := b.dev.ctx.OMGetRenderTargets() + // Assume someone else is holding on to the render targets. 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} + if depthView != nil { + _IUnknownRelease(unsafe.Pointer(depthView), depthView.vtbl.Release) + } + return &Framebuffer{dev: b.dev, renderTarget: renderTarget, depthView: depthView, foreign: true} } func (b *Backend) EndFrame() { diff --git a/app/internal/d3d11/d3d11_windows.go b/app/internal/d3d11/d3d11_windows.go index 9226f219..198296c0 100644 --- a/app/internal/d3d11/d3d11_windows.go +++ b/app/internal/d3d11/d3d11_windows.go @@ -1197,18 +1197,21 @@ func (c *_ID3D11DeviceContext) IASetPrimitiveTopology(mode uint32) { ) } -func (c *_ID3D11DeviceContext) OMGetRenderTargets() *_ID3D11RenderTargetView { - var target *_ID3D11RenderTargetView +func (c *_ID3D11DeviceContext) OMGetRenderTargets() (*_ID3D11RenderTargetView, *_ID3D11DepthStencilView) { + var ( + target *_ID3D11RenderTargetView + depthStencilView *_ID3D11DepthStencilView + ) syscall.Syscall6( c.vtbl.OMGetRenderTargets, 4, uintptr(unsafe.Pointer(c)), 1, // NumViews uintptr(unsafe.Pointer(&target)), - 0, // pDepthStencilView + uintptr(unsafe.Pointer(&depthStencilView)), 0, 0, ) - return target + return target, depthStencilView } func (c *_ID3D11DeviceContext) OMSetRenderTargets(target *_ID3D11RenderTargetView, depthStencil *_ID3D11DepthStencilView) {