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 <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-03-06 14:17:53 +01:00
parent 9793fcfcd0
commit 44991f355c
2 changed files with 13 additions and 7 deletions
+6 -3
View File
@@ -279,12 +279,15 @@ func NewBackend(d *Device) (*Backend, error) {
} }
func (b *Backend) BeginFrame() backend.Framebuffer { 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 { if renderTarget != nil {
// Assume someone else is holding on to it.
_IUnknownRelease(unsafe.Pointer(renderTarget), renderTarget.vtbl.Release) _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() { func (b *Backend) EndFrame() {
+7 -4
View File
@@ -1197,18 +1197,21 @@ func (c *_ID3D11DeviceContext) IASetPrimitiveTopology(mode uint32) {
) )
} }
func (c *_ID3D11DeviceContext) OMGetRenderTargets() *_ID3D11RenderTargetView { func (c *_ID3D11DeviceContext) OMGetRenderTargets() (*_ID3D11RenderTargetView, *_ID3D11DepthStencilView) {
var target *_ID3D11RenderTargetView var (
target *_ID3D11RenderTargetView
depthStencilView *_ID3D11DepthStencilView
)
syscall.Syscall6( syscall.Syscall6(
c.vtbl.OMGetRenderTargets, c.vtbl.OMGetRenderTargets,
4, 4,
uintptr(unsafe.Pointer(c)), uintptr(unsafe.Pointer(c)),
1, // NumViews 1, // NumViews
uintptr(unsafe.Pointer(&target)), uintptr(unsafe.Pointer(&target)),
0, // pDepthStencilView uintptr(unsafe.Pointer(&depthStencilView)),
0, 0, 0, 0,
) )
return target return target, depthStencilView
} }
func (c *_ID3D11DeviceContext) OMSetRenderTargets(target *_ID3D11RenderTargetView, depthStencil *_ID3D11DepthStencilView) { func (c *_ID3D11DeviceContext) OMSetRenderTargets(target *_ID3D11RenderTargetView, depthStencil *_ID3D11DepthStencilView) {