mirror of
https://github.com/bloeys/nmage.git
synced 2025-12-29 05:18:21 +00:00
Starting work on Engine+Mesh+Material systems/packages
This commit is contained in:
108
engine/engine.go
Executable file
108
engine/engine.go
Executable file
@ -0,0 +1,108 @@
|
||||
package engine
|
||||
|
||||
import (
|
||||
"github.com/bloeys/nmage/timing"
|
||||
"github.com/go-gl/gl/v4.1-core/gl"
|
||||
"github.com/veandco/go-sdl2/sdl"
|
||||
)
|
||||
|
||||
type Window struct {
|
||||
SDLWin *sdl.Window
|
||||
GlCtx sdl.GLContext
|
||||
}
|
||||
|
||||
func (w *Window) Destroy() error {
|
||||
return w.SDLWin.Destroy()
|
||||
}
|
||||
|
||||
func Init() error {
|
||||
|
||||
timing.Init()
|
||||
err := initSDL()
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
func initSDL() error {
|
||||
|
||||
err := sdl.Init(sdl.INIT_EVERYTHING)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
sdl.ShowCursor(1)
|
||||
|
||||
sdl.GLSetAttribute(sdl.MAJOR_VERSION, 4)
|
||||
sdl.GLSetAttribute(sdl.MINOR_VERSION, 1)
|
||||
|
||||
// R(0-255) G(0-255) B(0-255)
|
||||
sdl.GLSetAttribute(sdl.GL_RED_SIZE, 8)
|
||||
sdl.GLSetAttribute(sdl.GL_GREEN_SIZE, 8)
|
||||
sdl.GLSetAttribute(sdl.GL_BLUE_SIZE, 8)
|
||||
|
||||
sdl.GLSetAttribute(sdl.GL_DOUBLEBUFFER, 1)
|
||||
sdl.GLSetAttribute(sdl.GL_DEPTH_SIZE, 24)
|
||||
sdl.GLSetAttribute(sdl.GL_STENCIL_SIZE, 8)
|
||||
|
||||
sdl.GLSetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_CORE)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func CreateOpenGLWindow(title string, x, y, width, height int32, flags WindowFlags) (*Window, error) {
|
||||
return createWindow(title, x, y, width, height, WindowFlags_OPENGL|flags)
|
||||
}
|
||||
|
||||
func CreateOpenGLWindowCentered(title string, width, height int32, flags WindowFlags) (*Window, error) {
|
||||
return createWindow(title, -1, -1, width, height, WindowFlags_OPENGL|flags)
|
||||
}
|
||||
|
||||
func createWindow(title string, x, y, width, height int32, flags WindowFlags) (*Window, error) {
|
||||
|
||||
if x == -1 && y == -1 {
|
||||
x = sdl.WINDOWPOS_CENTERED
|
||||
y = sdl.WINDOWPOS_CENTERED
|
||||
}
|
||||
|
||||
sdlWin, err := sdl.CreateWindow(title, x, y, width, height, uint32(flags))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
win := &Window{SDLWin: sdlWin}
|
||||
|
||||
win.GlCtx, err = sdlWin.GLCreateContext()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err = initOpenGL()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return win, err
|
||||
}
|
||||
|
||||
func initOpenGL() error {
|
||||
|
||||
if err := gl.Init(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
gl.Enable(gl.DEPTH_TEST)
|
||||
|
||||
gl.Enable(gl.CULL_FACE)
|
||||
gl.CullFace(gl.BACK)
|
||||
gl.FrontFace(gl.CCW)
|
||||
|
||||
gl.ClearColor(0, 0, 0, 1)
|
||||
return nil
|
||||
}
|
||||
|
||||
func SetVSync(enabled bool) {
|
||||
if enabled {
|
||||
sdl.GLSetSwapInterval(1)
|
||||
} else {
|
||||
sdl.GLSetSwapInterval(0)
|
||||
}
|
||||
}
|
||||
29
engine/windowflags.go
Executable file
29
engine/windowflags.go
Executable file
@ -0,0 +1,29 @@
|
||||
package engine
|
||||
|
||||
import "github.com/veandco/go-sdl2/sdl"
|
||||
|
||||
type WindowFlags int
|
||||
|
||||
const (
|
||||
WindowFlags_FULLSCREEN WindowFlags = sdl.WINDOW_FULLSCREEN
|
||||
WindowFlags_OPENGL WindowFlags = sdl.WINDOW_OPENGL
|
||||
WindowFlags_SHOWN WindowFlags = sdl.WINDOW_SHOWN
|
||||
WindowFlags_HIDDEN WindowFlags = sdl.WINDOW_HIDDEN
|
||||
WindowFlags_BORDERLESS WindowFlags = sdl.WINDOW_BORDERLESS
|
||||
WindowFlags_RESIZABLE WindowFlags = sdl.WINDOW_RESIZABLE
|
||||
WindowFlags_MINIMIZED WindowFlags = sdl.WINDOW_MINIMIZED
|
||||
WindowFlags_MAXIMIZED WindowFlags = sdl.WINDOW_MAXIMIZED
|
||||
WindowFlags_INPUT_GRABBED WindowFlags = sdl.WINDOW_INPUT_GRABBED
|
||||
WindowFlags_INPUT_FOCUS WindowFlags = sdl.WINDOW_INPUT_FOCUS
|
||||
WindowFlags_MOUSE_FOCUS WindowFlags = sdl.WINDOW_MOUSE_FOCUS
|
||||
WindowFlags_FULLSCREEN_DESKTOP WindowFlags = sdl.WINDOW_FULLSCREEN_DESKTOP
|
||||
WindowFlags_FOREIGN WindowFlags = sdl.WINDOW_FOREIGN
|
||||
WindowFlags_ALLOW_HIGHDPI WindowFlags = sdl.WINDOW_ALLOW_HIGHDPI
|
||||
WindowFlags_MOUSE_CAPTURE WindowFlags = sdl.WINDOW_MOUSE_CAPTURE
|
||||
WindowFlags_ALWAYS_ON_TOP WindowFlags = sdl.WINDOW_ALWAYS_ON_TOP
|
||||
WindowFlags_SKIP_TASKBAR WindowFlags = sdl.WINDOW_SKIP_TASKBAR
|
||||
WindowFlags_UTILITY WindowFlags = sdl.WINDOW_UTILITY
|
||||
WindowFlags_TOOLTIP WindowFlags = sdl.WINDOW_TOOLTIP
|
||||
WindowFlags_POPUP_MENU WindowFlags = sdl.WINDOW_POPUP_MENU
|
||||
// WindowFlags_VULKAN WindowFlags = sdl.WINDOW_VULKAN
|
||||
)
|
||||
Reference in New Issue
Block a user