From 3d3ff575e3a421389e720c3a295cac8bb4dbb6ce Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Tue, 2 Mar 2021 20:02:59 +0100 Subject: [PATCH] app/internal/windows,app/internal/d3d11: ensure error is returned d3d11Context.Present would return a nil error if the underlying error d3d11.ErrorCode. While here, use defer for a resource cleanup. Signed-off-by: Elias Naur --- app/internal/d3d11/backend_windows.go | 6 +++--- app/internal/window/d3d11_windows.go | 22 ++++++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/app/internal/d3d11/backend_windows.go b/app/internal/d3d11/backend_windows.go index c8375ccb..66e32989 100644 --- a/app/internal/d3d11/backend_windows.go +++ b/app/internal/d3d11/backend_windows.go @@ -258,19 +258,19 @@ func NewBackend(d *Device) (*Backend, error) { caps.MaxTextureSize = 4096 } b := &Backend{dev: d, caps: caps} + // Enable depth mask to match OpenGL. + b.depthState.mask = true // Disable backface culling to match OpenGL. state, err := b.dev.dev.CreateRasterizerState(&_D3D11_RASTERIZER_DESC{ CullMode: _D3D11_CULL_NONE, FillMode: _D3D11_FILL_SOLID, DepthClipEnable: 1, }) - // Enable depth mask to match OpenGL. - b.depthState.mask = true if err != nil { return nil, err } + defer _IUnknownRelease(unsafe.Pointer(state), state.vtbl.Release) b.dev.ctx.RSSetState(state) - _IUnknownRelease(unsafe.Pointer(state), state.vtbl.Release) return b, nil } diff --git a/app/internal/window/d3d11_windows.go b/app/internal/window/d3d11_windows.go index 137505cd..6ce7a497 100644 --- a/app/internal/window/d3d11_windows.go +++ b/app/internal/window/d3d11_windows.go @@ -46,18 +46,20 @@ func (c *d3d11Context) Backend() (backend.Device, error) { } func (c *d3d11Context) Present() error { - if err := c.swchain.Present(); err != nil { - if err, ok := err.(d3d11.ErrorCode); ok { - switch err.Code { - case d3d11.DXGI_STATUS_OCCLUDED: - // Ignore - return nil - case d3d11.DXGI_ERROR_DEVICE_RESET, d3d11.DXGI_ERROR_DEVICE_REMOVED, d3d11.D3DDDIERR_DEVICEREMOVED: - return ErrDeviceLost - } + err := c.swchain.Present() + if err == nil { + return nil + } + if err, ok := err.(d3d11.ErrorCode); ok { + switch err.Code { + case d3d11.DXGI_STATUS_OCCLUDED: + // Ignore + return nil + case d3d11.DXGI_ERROR_DEVICE_RESET, d3d11.DXGI_ERROR_DEVICE_REMOVED, d3d11.D3DDDIERR_DEVICEREMOVED: + return ErrDeviceLost } } - return nil + return err } func (c *d3d11Context) MakeCurrent() error {