From 44991f355cc9938d02dc500062a20a8a61ac2cfa Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sat, 6 Mar 2021 14:17:53 +0100 Subject: [PATCH] app/internal/d3d11: include depth buffer in current framebuffer query Fixes rendering on Windows. Thanks to Egon Elbre for noticing. Signed-off-by: Elias Naur --- app/internal/d3d11/backend_windows.go | 9 ++++++--- app/internal/d3d11/d3d11_windows.go | 11 +++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) 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) {