add basic stubs for platform and window
This commit is contained in:
parent
454b9210c1
commit
8c0c4890cb
34
graphics/window.go
Normal file
34
graphics/window.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package graphics
|
||||||
|
|
||||||
|
import "github.com/veandco/go-sdl2/sdl"
|
||||||
|
|
||||||
|
type Window struct {
|
||||||
|
window *sdl.Window
|
||||||
|
renderer *sdl.Renderer
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewWindow(title string, width, height int) (*Window, error) {
|
||||||
|
window, err := sdl.CreateWindow(
|
||||||
|
title,
|
||||||
|
sdl.WINDOWPOS_UNDEFINED,
|
||||||
|
sdl.WINDOWPOS_UNDEFINED,
|
||||||
|
int32(width),
|
||||||
|
int32(height),
|
||||||
|
sdl.WINDOW_SHOWN,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
renderer, err := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED)
|
||||||
|
if err != nil {
|
||||||
|
window.Destroy()
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &Window{window, renderer}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *Window) Destroy() {
|
||||||
|
|
||||||
|
}
|
53
platform/platform.go
Normal file
53
platform/platform.go
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
package platform
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/go-gl/gl/v2.1/gl"
|
||||||
|
"github.com/veandco/go-sdl2/sdl"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Platform interface {
|
||||||
|
CreateWindow(title string, width, height int) (Window, error)
|
||||||
|
Destroy() error
|
||||||
|
}
|
||||||
|
|
||||||
|
var globalPlatformInit bool
|
||||||
|
|
||||||
|
type platform struct {
|
||||||
|
windows []Window
|
||||||
|
}
|
||||||
|
|
||||||
|
func New() (*Platform, error) {
|
||||||
|
if !globalPlatformInit {
|
||||||
|
if err := sdl.Init(sdl.INIT_VIDEO); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := gl.Init(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
globalPlatformInit = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *platform) CreateWindow(title string, width, height int) (Window, error) {
|
||||||
|
window, err := newWindow(title, width, height)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return window, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *platform) Destroy() error {
|
||||||
|
for _, w := range p.windows {
|
||||||
|
if err := w.Destroy(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p.windows = nil
|
||||||
|
return nil
|
||||||
|
}
|
47
platform/window.go
Normal file
47
platform/window.go
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package platform
|
||||||
|
|
||||||
|
import "github.com/veandco/go-sdl2/sdl"
|
||||||
|
|
||||||
|
type Window interface {
|
||||||
|
Destroy() error
|
||||||
|
}
|
||||||
|
|
||||||
|
type window struct {
|
||||||
|
sdlWindow *sdl.Window
|
||||||
|
sdlGlContext sdl.GLContext
|
||||||
|
}
|
||||||
|
|
||||||
|
func newWindow(title string, width, height int) (Window, error) {
|
||||||
|
sdlWindow, err := sdl.CreateWindow(
|
||||||
|
title,
|
||||||
|
sdl.WINDOWPOS_CENTERED,
|
||||||
|
sdl.WINDOWPOS_CENTERED,
|
||||||
|
int32(width),
|
||||||
|
int32(height),
|
||||||
|
sdl.WINDOW_OPENGL,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
sdlGlContext, err := sdlWindow.GLCreateContext()
|
||||||
|
if err != nil {
|
||||||
|
sdlWindow.Destroy()
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &window{sdlWindow, sdlGlContext}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *window) Destroy() error {
|
||||||
|
if w.sdlWindow != nil {
|
||||||
|
if err := w.sdlWindow.Destroy(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
w.sdlGlContext = nil
|
||||||
|
w.sdlWindow = nil
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user