mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-03 08:25:34 +00:00
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:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user