gpu,gpu/backend: implement generic backend.NewDevice

NewDevice creates a Device given an API, which is the necessary GPU
resources for a backend.

Convert gpu.New to take an API instead of a backend.Device directly.

In turn, this frees us to later unexport the backend package along with
the backend implementations (for now just gioui.org/gpu/gl for OpenGL).
It also allows programs that embed Gio (such as gioui.org/example/glfw)
to freely choose a backend, not just OpenGL.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-03-04 20:51:47 +01:00
parent 0e723fa192
commit 8ff6546285
19 changed files with 139 additions and 65 deletions
+6 -1
View File
@@ -109,6 +109,10 @@ type SwapChain struct {
fbo *Framebuffer
}
func init() {
backend.NewDirect3D11Device = newDirect3D11Device
}
func NewDevice() (*Device, error) {
var flags uint32
if debug {
@@ -237,7 +241,8 @@ func (s *SwapChain) Present() error {
return s.swchain.Present(1, 0)
}
func NewBackend(dev *_ID3D11Device) (*Backend, error) {
func newDirect3D11Device(api backend.Direct3D11) (backend.Device, error) {
dev := (*_ID3D11Device)(api.Device)
b := &Backend{
dev: dev,
ctx: dev.GetImmediateContext(),