forked from joejulian/gio
gpu: fold driver.Framebuffer functionality into driver.Texture
driver.Device.NewFramebuffer doesn't provide additional information over driver.Device.NewTexture, so Texture can hold its (optional) framebuffer on behalf of the renderers. Metal don't even need a separate framebuffer object. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -144,7 +144,7 @@ func TestFramebuffers(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func newFBO(t *testing.T, b driver.Device, size image.Point) driver.Framebuffer {
|
||||
func newFBO(t *testing.T, b driver.Device, size image.Point) driver.Texture {
|
||||
fboTex, err := b.NewTexture(
|
||||
driver.TextureFormatSRGBA,
|
||||
size.X, size.Y,
|
||||
@@ -157,14 +157,7 @@ func newFBO(t *testing.T, b driver.Device, size image.Point) driver.Framebuffer
|
||||
t.Cleanup(func() {
|
||||
fboTex.Release()
|
||||
})
|
||||
fbo, err := b.NewFramebuffer(fboTex)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
t.Cleanup(func() {
|
||||
fbo.Release()
|
||||
})
|
||||
return fbo
|
||||
return fboTex
|
||||
}
|
||||
|
||||
func newDriver(t *testing.T) driver.Device {
|
||||
@@ -191,7 +184,7 @@ func newDriver(t *testing.T) driver.Device {
|
||||
return b
|
||||
}
|
||||
|
||||
func screenshot(t *testing.T, d driver.Device, fbo driver.Framebuffer, size image.Point) *image.RGBA {
|
||||
func screenshot(t *testing.T, d driver.Device, fbo driver.Texture, size image.Point) *image.RGBA {
|
||||
img, err := driver.DownloadImage(d, fbo, image.Rectangle{Max: size})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
||||
@@ -21,7 +21,6 @@ type Window struct {
|
||||
dev driver.Device
|
||||
gpu gpu.GPU
|
||||
fboTex driver.Texture
|
||||
fbo driver.Framebuffer
|
||||
}
|
||||
|
||||
type context interface {
|
||||
@@ -56,20 +55,13 @@ func NewWindow(width, height int) (*Window, error) {
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
fbo, err := dev.NewFramebuffer(fboTex)
|
||||
if err != nil {
|
||||
fboTex.Release()
|
||||
return err
|
||||
}
|
||||
gp, err := gpu.New(api)
|
||||
if err != nil {
|
||||
fbo.Release()
|
||||
fboTex.Release()
|
||||
dev.Release()
|
||||
return err
|
||||
}
|
||||
w.fboTex = fboTex
|
||||
w.fbo = fbo
|
||||
w.gpu = gp
|
||||
w.dev = dev
|
||||
return err
|
||||
@@ -84,10 +76,6 @@ func NewWindow(width, height int) (*Window, error) {
|
||||
// Release resources associated with the window.
|
||||
func (w *Window) Release() {
|
||||
contextDo(w.ctx, func() error {
|
||||
if w.fbo != nil {
|
||||
w.fbo.Release()
|
||||
w.fbo = nil
|
||||
}
|
||||
if w.fboTex != nil {
|
||||
w.fboTex.Release()
|
||||
w.fboTex = nil
|
||||
@@ -113,7 +101,7 @@ func (w *Window) Release() {
|
||||
func (w *Window) Frame(frame *op.Ops) error {
|
||||
return contextDo(w.ctx, func() error {
|
||||
w.gpu.Clear(color.NRGBA{})
|
||||
return w.gpu.Frame(frame, driver.RenderTarget(w.fbo), w.size)
|
||||
return w.gpu.Frame(frame, w.fboTex, w.size)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -122,7 +110,7 @@ func (w *Window) Screenshot() (*image.RGBA, error) {
|
||||
var img *image.RGBA
|
||||
err := contextDo(w.ctx, func() error {
|
||||
var err error
|
||||
img, err = driver.DownloadImage(w.dev, w.fbo, image.Rectangle{Max: w.size})
|
||||
img, err = driver.DownloadImage(w.dev, w.fboTex, image.Rectangle{Max: w.size})
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user