forked from joejulian/gio
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:
@@ -53,10 +53,10 @@ func (c *d3d11Context) API() gpu.API {
|
||||
return gpu.Direct3D11{Device: unsafe.Pointer(c.dev)}
|
||||
}
|
||||
|
||||
func (c *d3d11Context) RenderTarget() gpu.RenderTarget {
|
||||
func (c *d3d11Context) RenderTarget() (gpu.RenderTarget, error) {
|
||||
return gpu.Direct3D11RenderTarget{
|
||||
RenderTarget: unsafe.Pointer(c.renderTarget),
|
||||
}
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c *d3d11Context) Present() error {
|
||||
|
||||
+2
-2
@@ -36,8 +36,8 @@ func newContext(w *window) (*glContext, error) {
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (c *glContext) RenderTarget() gpu.RenderTarget {
|
||||
return gpu.OpenGLRenderTarget{}
|
||||
func (c *glContext) RenderTarget() (gpu.RenderTarget, error) {
|
||||
return gpu.OpenGLRenderTarget{}, nil
|
||||
}
|
||||
|
||||
func (c *glContext) API() gpu.API {
|
||||
|
||||
+2
-2
@@ -72,8 +72,8 @@ func newContext(w *window) (*glContext, error) {
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (c *glContext) RenderTarget() gpu.RenderTarget {
|
||||
return gpu.OpenGLRenderTarget{}
|
||||
func (c *glContext) RenderTarget() (gpu.RenderTarget, error) {
|
||||
return gpu.OpenGLRenderTarget{}, nil
|
||||
}
|
||||
|
||||
func (c *glContext) API() gpu.API {
|
||||
|
||||
+5
-5
@@ -111,21 +111,21 @@ func newMtlContext(w *window) (*mtlContext, error) {
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (c *mtlContext) RenderTarget() gpu.RenderTarget {
|
||||
func (c *mtlContext) RenderTarget() (gpu.RenderTarget, error) {
|
||||
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)
|
||||
if c.drawable == 0 {
|
||||
panic("metal: [CAMetalLayer nextDrawable] failed")
|
||||
return nil, errors.New("metal: [CAMetalLayer nextDrawable] failed")
|
||||
}
|
||||
c.texture = C.drawableTexture(c.drawable)
|
||||
if c.texture == 0 {
|
||||
panic("metal: CADrawable.texture is nil")
|
||||
return nil, errors.New("metal: CADrawable.texture is nil")
|
||||
}
|
||||
return gpu.MetalRenderTarget{
|
||||
Texture: unsafe.Pointer(c.texture),
|
||||
}
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (c *mtlContext) API() gpu.API {
|
||||
|
||||
@@ -105,7 +105,7 @@ type frameEvent struct {
|
||||
|
||||
type context interface {
|
||||
API() gpu.API
|
||||
RenderTarget() gpu.RenderTarget
|
||||
RenderTarget() (gpu.RenderTarget, error)
|
||||
Present() error
|
||||
Refresh() error
|
||||
Release()
|
||||
|
||||
+5
-1
@@ -198,7 +198,11 @@ func (w *Window) render(frame *op.Ops, viewport image.Point) error {
|
||||
} else {
|
||||
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 w.ctx.Present()
|
||||
|
||||
+2
-2
@@ -97,8 +97,8 @@ func NewContext(disp NativeDisplayType) (*Context, error) {
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (c *Context) RenderTarget() gpu.RenderTarget {
|
||||
return gpu.OpenGLRenderTarget{}
|
||||
func (c *Context) RenderTarget() (gpu.RenderTarget, error) {
|
||||
return gpu.OpenGLRenderTarget{}, nil
|
||||
}
|
||||
|
||||
func (c *Context) API() gpu.API {
|
||||
|
||||
Reference in New Issue
Block a user