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:
Elias Naur
2021-09-19 19:36:48 +02:00
parent b599a6d1c5
commit 0bdd24c51e
9 changed files with 135 additions and 204 deletions
+3 -10
View File
@@ -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)
+2 -14
View File
@@ -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 {