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
}
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
}
+12 -10
View File
@@ -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 {