app: add error result to context.RenderTarget

Vulkan may report VK_ERROR_OUT_OF_DATE_KHR which is not a fatal error.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-09-07 18:42:21 +02:00
parent 9e6ed3cb96
commit af6770de18
7 changed files with 19 additions and 15 deletions
+2 -2
View File
@@ -53,10 +53,10 @@ func (c *d3d11Context) API() gpu.API {
return gpu.Direct3D11{Device: unsafe.Pointer(c.dev)} return gpu.Direct3D11{Device: unsafe.Pointer(c.dev)}
} }
func (c *d3d11Context) RenderTarget() gpu.RenderTarget { func (c *d3d11Context) RenderTarget() (gpu.RenderTarget, error) {
return gpu.Direct3D11RenderTarget{ return gpu.Direct3D11RenderTarget{
RenderTarget: unsafe.Pointer(c.renderTarget), RenderTarget: unsafe.Pointer(c.renderTarget),
} }, nil
} }
func (c *d3d11Context) Present() error { func (c *d3d11Context) Present() error {
+2 -2
View File
@@ -36,8 +36,8 @@ func newContext(w *window) (*glContext, error) {
return c, nil return c, nil
} }
func (c *glContext) RenderTarget() gpu.RenderTarget { func (c *glContext) RenderTarget() (gpu.RenderTarget, error) {
return gpu.OpenGLRenderTarget{} return gpu.OpenGLRenderTarget{}, nil
} }
func (c *glContext) API() gpu.API { func (c *glContext) API() gpu.API {
+2 -2
View File
@@ -72,8 +72,8 @@ func newContext(w *window) (*glContext, error) {
return c, nil return c, nil
} }
func (c *glContext) RenderTarget() gpu.RenderTarget { func (c *glContext) RenderTarget() (gpu.RenderTarget, error) {
return gpu.OpenGLRenderTarget{} return gpu.OpenGLRenderTarget{}, nil
} }
func (c *glContext) API() gpu.API { func (c *glContext) API() gpu.API {
+5 -5
View File
@@ -111,21 +111,21 @@ func newMtlContext(w *window) (*mtlContext, error) {
return c, nil return c, nil
} }
func (c *mtlContext) RenderTarget() gpu.RenderTarget { func (c *mtlContext) RenderTarget() (gpu.RenderTarget, error) {
if c.drawable != 0 || c.texture != 0 { if c.drawable != 0 || c.texture != 0 {
panic("a previous RenderTarget wasn't Presented") return nil, errors.New("metal:a previous RenderTarget wasn't Presented")
} }
c.drawable = C.nextDrawable(c.layer) c.drawable = C.nextDrawable(c.layer)
if c.drawable == 0 { if c.drawable == 0 {
panic("metal: [CAMetalLayer nextDrawable] failed") return nil, errors.New("metal: [CAMetalLayer nextDrawable] failed")
} }
c.texture = C.drawableTexture(c.drawable) c.texture = C.drawableTexture(c.drawable)
if c.texture == 0 { if c.texture == 0 {
panic("metal: CADrawable.texture is nil") return nil, errors.New("metal: CADrawable.texture is nil")
} }
return gpu.MetalRenderTarget{ return gpu.MetalRenderTarget{
Texture: unsafe.Pointer(c.texture), Texture: unsafe.Pointer(c.texture),
} }, nil
} }
func (c *mtlContext) API() gpu.API { func (c *mtlContext) API() gpu.API {
+1 -1
View File
@@ -105,7 +105,7 @@ type frameEvent struct {
type context interface { type context interface {
API() gpu.API API() gpu.API
RenderTarget() gpu.RenderTarget RenderTarget() (gpu.RenderTarget, error)
Present() error Present() error
Refresh() error Refresh() error
Release() Release()
+5 -1
View File
@@ -198,7 +198,11 @@ func (w *Window) render(frame *op.Ops, viewport image.Point) error {
} else { } else {
w.gpu.Clear(color.NRGBA{A: 0xff, R: 0xff, G: 0xff, B: 0xff}) w.gpu.Clear(color.NRGBA{A: 0xff, R: 0xff, G: 0xff, B: 0xff})
} }
if err := w.gpu.Frame(frame, w.ctx.RenderTarget(), viewport); err != nil { target, err := w.ctx.RenderTarget()
if err != nil {
return err
}
if err := w.gpu.Frame(frame, target, viewport); err != nil {
return err return err
} }
return w.ctx.Present() return w.ctx.Present()
+2 -2
View File
@@ -97,8 +97,8 @@ func NewContext(disp NativeDisplayType) (*Context, error) {
return c, nil return c, nil
} }
func (c *Context) RenderTarget() gpu.RenderTarget { func (c *Context) RenderTarget() (gpu.RenderTarget, error) {
return gpu.OpenGLRenderTarget{} return gpu.OpenGLRenderTarget{}, nil
} }
func (c *Context) API() gpu.API { func (c *Context) API() gpu.API {