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 <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-03-02 20:02:59 +01:00
parent 8571433707
commit 3d3ff575e3
2 changed files with 15 additions and 13 deletions
+3 -3
View File
@@ -258,19 +258,19 @@ func NewBackend(d *Device) (*Backend, error) {
caps.MaxTextureSize = 4096 caps.MaxTextureSize = 4096
} }
b := &Backend{dev: d, caps: caps} b := &Backend{dev: d, caps: caps}
// Enable depth mask to match OpenGL.
b.depthState.mask = true
// Disable backface culling to match OpenGL. // Disable backface culling to match OpenGL.
state, err := b.dev.dev.CreateRasterizerState(&_D3D11_RASTERIZER_DESC{ state, err := b.dev.dev.CreateRasterizerState(&_D3D11_RASTERIZER_DESC{
CullMode: _D3D11_CULL_NONE, CullMode: _D3D11_CULL_NONE,
FillMode: _D3D11_FILL_SOLID, FillMode: _D3D11_FILL_SOLID,
DepthClipEnable: 1, DepthClipEnable: 1,
}) })
// Enable depth mask to match OpenGL.
b.depthState.mask = true
if err != nil { if err != nil {
return nil, err return nil, err
} }
defer _IUnknownRelease(unsafe.Pointer(state), state.vtbl.Release)
b.dev.ctx.RSSetState(state) b.dev.ctx.RSSetState(state)
_IUnknownRelease(unsafe.Pointer(state), state.vtbl.Release)
return b, nil return b, nil
} }
+12 -10
View File
@@ -46,18 +46,20 @@ func (c *d3d11Context) Backend() (backend.Device, error) {
} }
func (c *d3d11Context) Present() error { func (c *d3d11Context) Present() error {
if err := c.swchain.Present(); err != nil { err := c.swchain.Present()
if err, ok := err.(d3d11.ErrorCode); ok { if err == nil {
switch err.Code { return nil
case d3d11.DXGI_STATUS_OCCLUDED: }
// Ignore if err, ok := err.(d3d11.ErrorCode); ok {
return nil switch err.Code {
case d3d11.DXGI_ERROR_DEVICE_RESET, d3d11.DXGI_ERROR_DEVICE_REMOVED, d3d11.D3DDDIERR_DEVICEREMOVED: case d3d11.DXGI_STATUS_OCCLUDED:
return ErrDeviceLost // 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 { func (c *d3d11Context) MakeCurrent() error {