updated to go-sdl2 v0.3; also fixed key runes
This commit is contained in:
parent
53630c5cff
commit
6ed91cb412
3 changed files with 250 additions and 172 deletions
|
@ -22,23 +22,23 @@ func main() {
|
||||||
defer sdl.Quit()
|
defer sdl.Quit()
|
||||||
|
|
||||||
// the stencil size setting is required for the canvas to work
|
// the stencil size setting is required for the canvas to work
|
||||||
sdl.GL_SetAttribute(sdl.GL_RED_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_RED_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_GREEN_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_GREEN_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_BLUE_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_BLUE_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_ALPHA_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_DEPTH_SIZE, 0)
|
sdl.GLSetAttribute(sdl.GL_DEPTH_SIZE, 0)
|
||||||
sdl.GL_SetAttribute(sdl.GL_STENCIL_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_STENCIL_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1)
|
sdl.GLSetAttribute(sdl.GL_DOUBLEBUFFER, 1)
|
||||||
sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1)
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1)
|
||||||
sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4)
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4)
|
||||||
|
|
||||||
// create window
|
// create window
|
||||||
const title = "SDL Test"
|
const title = "SDL Test"
|
||||||
window, err := sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, 1280, 720, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL)
|
window, err := sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, 1280, 720, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// fallback in case multisample is not available
|
// fallback in case multisample is not available
|
||||||
sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0)
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0)
|
||||||
sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0)
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0)
|
||||||
window, err = sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, 1280, 720, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL)
|
window, err = sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, 1280, 720, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error creating window: %v", err)
|
log.Fatalf("Error creating window: %v", err)
|
||||||
|
@ -47,7 +47,7 @@ func main() {
|
||||||
defer window.Destroy()
|
defer window.Destroy()
|
||||||
|
|
||||||
// create GL context
|
// create GL context
|
||||||
glContext, err := sdl.GL_CreateContext(window)
|
glContext, err := window.GLCreateContext()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error creating GL context: %v", err)
|
log.Fatalf("Error creating GL context: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// enable vsync and multisample (if available)
|
// enable vsync and multisample (if available)
|
||||||
sdl.GL_SetSwapInterval(1)
|
sdl.GLSetSwapInterval(1)
|
||||||
gl.Enable(gl.MULTISAMPLE)
|
gl.Enable(gl.MULTISAMPLE)
|
||||||
|
|
||||||
// load canvas GL assets
|
// load canvas GL assets
|
||||||
|
@ -72,7 +72,7 @@ func main() {
|
||||||
cv := canvas.New(0, 0, 0, 0)
|
cv := canvas.New(0, 0, 0, 0)
|
||||||
|
|
||||||
for running := true; running; {
|
for running := true; running; {
|
||||||
err := sdl.GL_MakeCurrent(window, glContext)
|
err := window.GLMakeCurrent(glContext)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
time.Sleep(10 * time.Millisecond)
|
time.Sleep(10 * time.Millisecond)
|
||||||
continue
|
continue
|
||||||
|
@ -86,8 +86,8 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
switch e := event.(type) {
|
switch e := event.(type) {
|
||||||
case *sdl.KeyDownEvent:
|
case *sdl.KeyboardEvent:
|
||||||
if e.Keysym.Scancode == sdl.SCANCODE_ESCAPE {
|
if e.Type == sdl.KEYDOWN && e.Keysym.Scancode == sdl.SCANCODE_ESCAPE {
|
||||||
running = false
|
running = false
|
||||||
}
|
}
|
||||||
case *sdl.WindowEvent:
|
case *sdl.WindowEvent:
|
||||||
|
@ -99,13 +99,13 @@ func main() {
|
||||||
|
|
||||||
// set canvas size
|
// set canvas size
|
||||||
ww, wh := window.GetSize()
|
ww, wh := window.GetSize()
|
||||||
cv.SetSize(ww, wh)
|
cv.SetSize(int(ww), int(wh))
|
||||||
|
|
||||||
// call the run function to do all the drawing
|
// call the run function to do all the drawing
|
||||||
run(cv, float64(ww), float64(wh))
|
run(cv, float64(ww), float64(wh))
|
||||||
|
|
||||||
// swap back and front buffer
|
// swap back and front buffer
|
||||||
sdl.GL_SwapWindow(window)
|
window.GLSwap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,139 +2,215 @@ package sdlcanvas
|
||||||
|
|
||||||
import "github.com/veandco/go-sdl2/sdl"
|
import "github.com/veandco/go-sdl2/sdl"
|
||||||
|
|
||||||
var keyMap [262]string
|
var keyNameMap [262]string
|
||||||
|
var keyRuneMap [262]rune
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
keyMap[sdl.SCANCODE_ESCAPE] = "Escape"
|
keyNameMap[sdl.SCANCODE_ESCAPE] = "Escape"
|
||||||
keyMap[sdl.SCANCODE_0] = "Digit0"
|
keyNameMap[sdl.SCANCODE_0] = "Digit0"
|
||||||
keyMap[sdl.SCANCODE_1] = "Digit1"
|
keyNameMap[sdl.SCANCODE_1] = "Digit1"
|
||||||
keyMap[sdl.SCANCODE_2] = "Digit2"
|
keyNameMap[sdl.SCANCODE_2] = "Digit2"
|
||||||
keyMap[sdl.SCANCODE_3] = "Digit3"
|
keyNameMap[sdl.SCANCODE_3] = "Digit3"
|
||||||
keyMap[sdl.SCANCODE_4] = "Digit4"
|
keyNameMap[sdl.SCANCODE_4] = "Digit4"
|
||||||
keyMap[sdl.SCANCODE_5] = "Digit5"
|
keyNameMap[sdl.SCANCODE_5] = "Digit5"
|
||||||
keyMap[sdl.SCANCODE_6] = "Digit6"
|
keyNameMap[sdl.SCANCODE_6] = "Digit6"
|
||||||
keyMap[sdl.SCANCODE_7] = "Digit7"
|
keyNameMap[sdl.SCANCODE_7] = "Digit7"
|
||||||
keyMap[sdl.SCANCODE_8] = "Digit8"
|
keyNameMap[sdl.SCANCODE_8] = "Digit8"
|
||||||
keyMap[sdl.SCANCODE_9] = "Digit9"
|
keyNameMap[sdl.SCANCODE_9] = "Digit9"
|
||||||
keyMap[sdl.SCANCODE_MINUS] = "Minus"
|
keyNameMap[sdl.SCANCODE_MINUS] = "Minus"
|
||||||
keyMap[sdl.SCANCODE_EQUALS] = "Equal"
|
keyNameMap[sdl.SCANCODE_EQUALS] = "Equal"
|
||||||
keyMap[sdl.SCANCODE_BACKSPACE] = "Backspace"
|
keyNameMap[sdl.SCANCODE_BACKSPACE] = "Backspace"
|
||||||
keyMap[sdl.SCANCODE_TAB] = "Tab"
|
keyNameMap[sdl.SCANCODE_TAB] = "Tab"
|
||||||
keyMap[sdl.SCANCODE_Q] = "KeyQ"
|
keyNameMap[sdl.SCANCODE_Q] = "KeyQ"
|
||||||
keyMap[sdl.SCANCODE_W] = "KeyW"
|
keyNameMap[sdl.SCANCODE_W] = "KeyW"
|
||||||
keyMap[sdl.SCANCODE_E] = "KeyE"
|
keyNameMap[sdl.SCANCODE_E] = "KeyE"
|
||||||
keyMap[sdl.SCANCODE_R] = "KeyR"
|
keyNameMap[sdl.SCANCODE_R] = "KeyR"
|
||||||
keyMap[sdl.SCANCODE_T] = "KeyT"
|
keyNameMap[sdl.SCANCODE_T] = "KeyT"
|
||||||
keyMap[sdl.SCANCODE_Y] = "KeyY"
|
keyNameMap[sdl.SCANCODE_Y] = "KeyY"
|
||||||
keyMap[sdl.SCANCODE_U] = "KeyU"
|
keyNameMap[sdl.SCANCODE_U] = "KeyU"
|
||||||
keyMap[sdl.SCANCODE_I] = "KeyI"
|
keyNameMap[sdl.SCANCODE_I] = "KeyI"
|
||||||
keyMap[sdl.SCANCODE_O] = "KeyO"
|
keyNameMap[sdl.SCANCODE_O] = "KeyO"
|
||||||
keyMap[sdl.SCANCODE_P] = "KeyP"
|
keyNameMap[sdl.SCANCODE_P] = "KeyP"
|
||||||
keyMap[sdl.SCANCODE_LEFTBRACKET] = "BracketLeft"
|
keyNameMap[sdl.SCANCODE_LEFTBRACKET] = "BracketLeft"
|
||||||
keyMap[sdl.SCANCODE_RIGHTBRACKET] = "BracketRight"
|
keyNameMap[sdl.SCANCODE_RIGHTBRACKET] = "BracketRight"
|
||||||
keyMap[sdl.SCANCODE_RETURN] = "Enter"
|
keyNameMap[sdl.SCANCODE_RETURN] = "Enter"
|
||||||
keyMap[sdl.SCANCODE_LCTRL] = "ControlLeft"
|
keyNameMap[sdl.SCANCODE_LCTRL] = "ControlLeft"
|
||||||
keyMap[sdl.SCANCODE_A] = "KeyA"
|
keyNameMap[sdl.SCANCODE_A] = "KeyA"
|
||||||
keyMap[sdl.SCANCODE_S] = "KeyS"
|
keyNameMap[sdl.SCANCODE_S] = "KeyS"
|
||||||
keyMap[sdl.SCANCODE_D] = "KeyD"
|
keyNameMap[sdl.SCANCODE_D] = "KeyD"
|
||||||
keyMap[sdl.SCANCODE_F] = "KeyF"
|
keyNameMap[sdl.SCANCODE_F] = "KeyF"
|
||||||
keyMap[sdl.SCANCODE_G] = "KeyG"
|
keyNameMap[sdl.SCANCODE_G] = "KeyG"
|
||||||
keyMap[sdl.SCANCODE_H] = "KeyH"
|
keyNameMap[sdl.SCANCODE_H] = "KeyH"
|
||||||
keyMap[sdl.SCANCODE_J] = "KeyJ"
|
keyNameMap[sdl.SCANCODE_J] = "KeyJ"
|
||||||
keyMap[sdl.SCANCODE_K] = "KeyK"
|
keyNameMap[sdl.SCANCODE_K] = "KeyK"
|
||||||
keyMap[sdl.SCANCODE_L] = "KeyL"
|
keyNameMap[sdl.SCANCODE_L] = "KeyL"
|
||||||
keyMap[sdl.SCANCODE_SEMICOLON] = "Semicolon"
|
keyNameMap[sdl.SCANCODE_SEMICOLON] = "Semicolon"
|
||||||
keyMap[sdl.SCANCODE_APOSTROPHE] = "Quote"
|
keyNameMap[sdl.SCANCODE_APOSTROPHE] = "Quote"
|
||||||
keyMap[sdl.SCANCODE_GRAVE] = "Backquote"
|
keyNameMap[sdl.SCANCODE_GRAVE] = "Backquote"
|
||||||
keyMap[sdl.SCANCODE_LSHIFT] = "ShiftLeft"
|
keyNameMap[sdl.SCANCODE_LSHIFT] = "ShiftLeft"
|
||||||
keyMap[sdl.SCANCODE_BACKSLASH] = "Backslash"
|
keyNameMap[sdl.SCANCODE_BACKSLASH] = "Backslash"
|
||||||
keyMap[sdl.SCANCODE_Z] = "KeyZ"
|
keyNameMap[sdl.SCANCODE_Z] = "KeyZ"
|
||||||
keyMap[sdl.SCANCODE_X] = "KeyX"
|
keyNameMap[sdl.SCANCODE_X] = "KeyX"
|
||||||
keyMap[sdl.SCANCODE_C] = "KeyC"
|
keyNameMap[sdl.SCANCODE_C] = "KeyC"
|
||||||
keyMap[sdl.SCANCODE_V] = "KeyV"
|
keyNameMap[sdl.SCANCODE_V] = "KeyV"
|
||||||
keyMap[sdl.SCANCODE_B] = "KeyB"
|
keyNameMap[sdl.SCANCODE_B] = "KeyB"
|
||||||
keyMap[sdl.SCANCODE_N] = "KeyN"
|
keyNameMap[sdl.SCANCODE_N] = "KeyN"
|
||||||
keyMap[sdl.SCANCODE_M] = "KeyM"
|
keyNameMap[sdl.SCANCODE_M] = "KeyM"
|
||||||
keyMap[sdl.SCANCODE_COMMA] = "Comma"
|
keyNameMap[sdl.SCANCODE_COMMA] = "Comma"
|
||||||
keyMap[sdl.SCANCODE_PERIOD] = "Period"
|
keyNameMap[sdl.SCANCODE_PERIOD] = "Period"
|
||||||
keyMap[sdl.SCANCODE_SLASH] = "Slash"
|
keyNameMap[sdl.SCANCODE_SLASH] = "Slash"
|
||||||
keyMap[sdl.SCANCODE_RSHIFT] = "RightShift"
|
keyNameMap[sdl.SCANCODE_RSHIFT] = "RightShift"
|
||||||
keyMap[sdl.SCANCODE_KP_MULTIPLY] = "NumpadMultiply"
|
keyNameMap[sdl.SCANCODE_KP_MULTIPLY] = "NumpadMultiply"
|
||||||
keyMap[sdl.SCANCODE_LALT] = "AltLeft"
|
keyNameMap[sdl.SCANCODE_LALT] = "AltLeft"
|
||||||
keyMap[sdl.SCANCODE_SPACE] = "Space"
|
keyNameMap[sdl.SCANCODE_SPACE] = "Space"
|
||||||
keyMap[sdl.SCANCODE_CAPSLOCK] = "CapsLock"
|
keyNameMap[sdl.SCANCODE_CAPSLOCK] = "CapsLock"
|
||||||
keyMap[sdl.SCANCODE_F1] = "F1"
|
keyNameMap[sdl.SCANCODE_F1] = "F1"
|
||||||
keyMap[sdl.SCANCODE_F2] = "F2"
|
keyNameMap[sdl.SCANCODE_F2] = "F2"
|
||||||
keyMap[sdl.SCANCODE_F3] = "F3"
|
keyNameMap[sdl.SCANCODE_F3] = "F3"
|
||||||
keyMap[sdl.SCANCODE_F4] = "F4"
|
keyNameMap[sdl.SCANCODE_F4] = "F4"
|
||||||
keyMap[sdl.SCANCODE_F5] = "F5"
|
keyNameMap[sdl.SCANCODE_F5] = "F5"
|
||||||
keyMap[sdl.SCANCODE_F6] = "F6"
|
keyNameMap[sdl.SCANCODE_F6] = "F6"
|
||||||
keyMap[sdl.SCANCODE_F7] = "F7"
|
keyNameMap[sdl.SCANCODE_F7] = "F7"
|
||||||
keyMap[sdl.SCANCODE_F8] = "F8"
|
keyNameMap[sdl.SCANCODE_F8] = "F8"
|
||||||
keyMap[sdl.SCANCODE_F9] = "F9"
|
keyNameMap[sdl.SCANCODE_F9] = "F9"
|
||||||
keyMap[sdl.SCANCODE_F10] = "F10"
|
keyNameMap[sdl.SCANCODE_F10] = "F10"
|
||||||
keyMap[sdl.SCANCODE_PAUSE] = "Pause"
|
keyNameMap[sdl.SCANCODE_PAUSE] = "Pause"
|
||||||
keyMap[sdl.SCANCODE_SCROLLLOCK] = "ScrollLock"
|
keyNameMap[sdl.SCANCODE_SCROLLLOCK] = "ScrollLock"
|
||||||
keyMap[sdl.SCANCODE_KP_7] = "Numpad7"
|
keyNameMap[sdl.SCANCODE_KP_7] = "Numpad7"
|
||||||
keyMap[sdl.SCANCODE_KP_8] = "Numpad8"
|
keyNameMap[sdl.SCANCODE_KP_8] = "Numpad8"
|
||||||
keyMap[sdl.SCANCODE_KP_9] = "Numpad9"
|
keyNameMap[sdl.SCANCODE_KP_9] = "Numpad9"
|
||||||
keyMap[sdl.SCANCODE_KP_MINUS] = "NumpadSubtract"
|
keyNameMap[sdl.SCANCODE_KP_MINUS] = "NumpadSubtract"
|
||||||
keyMap[sdl.SCANCODE_KP_4] = "Numpad4"
|
keyNameMap[sdl.SCANCODE_KP_4] = "Numpad4"
|
||||||
keyMap[sdl.SCANCODE_KP_5] = "Numpad5"
|
keyNameMap[sdl.SCANCODE_KP_5] = "Numpad5"
|
||||||
keyMap[sdl.SCANCODE_KP_6] = "Numpad6"
|
keyNameMap[sdl.SCANCODE_KP_6] = "Numpad6"
|
||||||
keyMap[sdl.SCANCODE_KP_PLUS] = "NumpadAdd"
|
keyNameMap[sdl.SCANCODE_KP_PLUS] = "NumpadAdd"
|
||||||
keyMap[sdl.SCANCODE_KP_1] = "Numpad1"
|
keyNameMap[sdl.SCANCODE_KP_1] = "Numpad1"
|
||||||
keyMap[sdl.SCANCODE_KP_2] = "Numpad2"
|
keyNameMap[sdl.SCANCODE_KP_2] = "Numpad2"
|
||||||
keyMap[sdl.SCANCODE_KP_3] = "Numpad3"
|
keyNameMap[sdl.SCANCODE_KP_3] = "Numpad3"
|
||||||
keyMap[sdl.SCANCODE_KP_0] = "Numpad0"
|
keyNameMap[sdl.SCANCODE_KP_0] = "Numpad0"
|
||||||
keyMap[sdl.SCANCODE_KP_DECIMAL] = "NumpadDecimal"
|
keyNameMap[sdl.SCANCODE_KP_DECIMAL] = "NumpadDecimal"
|
||||||
keyMap[sdl.SCANCODE_PRINTSCREEN] = "PrintScreen"
|
keyNameMap[sdl.SCANCODE_PRINTSCREEN] = "PrintScreen"
|
||||||
keyMap[sdl.SCANCODE_NONUSBACKSLASH] = "IntlBackslash"
|
keyNameMap[sdl.SCANCODE_NONUSBACKSLASH] = "IntlBackslash"
|
||||||
keyMap[sdl.SCANCODE_F11] = "F11"
|
keyNameMap[sdl.SCANCODE_F11] = "F11"
|
||||||
keyMap[sdl.SCANCODE_F12] = "F12"
|
keyNameMap[sdl.SCANCODE_F12] = "F12"
|
||||||
keyMap[sdl.SCANCODE_KP_EQUALS] = "NumpadEqual"
|
keyNameMap[sdl.SCANCODE_KP_EQUALS] = "NumpadEqual"
|
||||||
keyMap[sdl.SCANCODE_F13] = "F13"
|
keyNameMap[sdl.SCANCODE_F13] = "F13"
|
||||||
keyMap[sdl.SCANCODE_F14] = "F14"
|
keyNameMap[sdl.SCANCODE_F14] = "F14"
|
||||||
keyMap[sdl.SCANCODE_F15] = "F15"
|
keyNameMap[sdl.SCANCODE_F15] = "F15"
|
||||||
keyMap[sdl.SCANCODE_F16] = "F16"
|
keyNameMap[sdl.SCANCODE_F16] = "F16"
|
||||||
keyMap[sdl.SCANCODE_F17] = "F17"
|
keyNameMap[sdl.SCANCODE_F17] = "F17"
|
||||||
keyMap[sdl.SCANCODE_F18] = "F18"
|
keyNameMap[sdl.SCANCODE_F18] = "F18"
|
||||||
keyMap[sdl.SCANCODE_F19] = "F19"
|
keyNameMap[sdl.SCANCODE_F19] = "F19"
|
||||||
keyMap[sdl.SCANCODE_UNDO] = "Undo"
|
keyNameMap[sdl.SCANCODE_UNDO] = "Undo"
|
||||||
keyMap[sdl.SCANCODE_PASTE] = "Paste"
|
keyNameMap[sdl.SCANCODE_PASTE] = "Paste"
|
||||||
keyMap[sdl.SCANCODE_AUDIOPREV] = "MediaTrackPrevious"
|
keyNameMap[sdl.SCANCODE_AUDIOPREV] = "MediaTrackPrevious"
|
||||||
keyMap[sdl.SCANCODE_CUT] = "Cut"
|
keyNameMap[sdl.SCANCODE_CUT] = "Cut"
|
||||||
keyMap[sdl.SCANCODE_COPY] = "Copy"
|
keyNameMap[sdl.SCANCODE_COPY] = "Copy"
|
||||||
keyMap[sdl.SCANCODE_AUDIONEXT] = "MediaTrackNext"
|
keyNameMap[sdl.SCANCODE_AUDIONEXT] = "MediaTrackNext"
|
||||||
keyMap[sdl.SCANCODE_KP_ENTER] = "NumpadEnter"
|
keyNameMap[sdl.SCANCODE_KP_ENTER] = "NumpadEnter"
|
||||||
keyMap[sdl.SCANCODE_RCTRL] = "ControlRight"
|
keyNameMap[sdl.SCANCODE_RCTRL] = "ControlRight"
|
||||||
keyMap[sdl.SCANCODE_MUTE] = "AudioVolumeMute"
|
keyNameMap[sdl.SCANCODE_MUTE] = "AudioVolumeMute"
|
||||||
keyMap[sdl.SCANCODE_AUDIOPLAY] = "MediaPlayPause"
|
keyNameMap[sdl.SCANCODE_AUDIOPLAY] = "MediaPlayPause"
|
||||||
keyMap[sdl.SCANCODE_AUDIOSTOP] = "MediaStop"
|
keyNameMap[sdl.SCANCODE_AUDIOSTOP] = "MediaStop"
|
||||||
keyMap[sdl.SCANCODE_VOLUMEDOWN] = "AudioVolumeDown"
|
keyNameMap[sdl.SCANCODE_VOLUMEDOWN] = "AudioVolumeDown"
|
||||||
keyMap[sdl.SCANCODE_VOLUMEUP] = "AudioVolumeUp"
|
keyNameMap[sdl.SCANCODE_VOLUMEUP] = "AudioVolumeUp"
|
||||||
keyMap[sdl.SCANCODE_KP_DIVIDE] = "NumpadDivide"
|
keyNameMap[sdl.SCANCODE_KP_DIVIDE] = "NumpadDivide"
|
||||||
keyMap[sdl.SCANCODE_RALT] = "AltRight"
|
keyNameMap[sdl.SCANCODE_RALT] = "AltRight"
|
||||||
keyMap[sdl.SCANCODE_HELP] = "Help"
|
keyNameMap[sdl.SCANCODE_HELP] = "Help"
|
||||||
keyMap[sdl.SCANCODE_HOME] = "Home"
|
keyNameMap[sdl.SCANCODE_HOME] = "Home"
|
||||||
keyMap[sdl.SCANCODE_UP] = "ArrowUp"
|
keyNameMap[sdl.SCANCODE_UP] = "ArrowUp"
|
||||||
keyMap[sdl.SCANCODE_PAGEUP] = "PageUp"
|
keyNameMap[sdl.SCANCODE_PAGEUP] = "PageUp"
|
||||||
keyMap[sdl.SCANCODE_LEFT] = "ArrowLeft"
|
keyNameMap[sdl.SCANCODE_LEFT] = "ArrowLeft"
|
||||||
keyMap[sdl.SCANCODE_RIGHT] = "ArrowRight"
|
keyNameMap[sdl.SCANCODE_RIGHT] = "ArrowRight"
|
||||||
keyMap[sdl.SCANCODE_END] = "End"
|
keyNameMap[sdl.SCANCODE_END] = "End"
|
||||||
keyMap[sdl.SCANCODE_DOWN] = "ArrowDown"
|
keyNameMap[sdl.SCANCODE_DOWN] = "ArrowDown"
|
||||||
keyMap[sdl.SCANCODE_INSERT] = "Insert"
|
keyNameMap[sdl.SCANCODE_INSERT] = "Insert"
|
||||||
keyMap[sdl.SCANCODE_DELETE] = "Delete"
|
keyNameMap[sdl.SCANCODE_DELETE] = "Delete"
|
||||||
keyMap[sdl.SCANCODE_APPLICATION] = "ContextMenu"
|
keyNameMap[sdl.SCANCODE_APPLICATION] = "ContextMenu"
|
||||||
|
|
||||||
|
keyRuneMap[sdl.SCANCODE_0] = '0'
|
||||||
|
keyRuneMap[sdl.SCANCODE_1] = '1'
|
||||||
|
keyRuneMap[sdl.SCANCODE_2] = '2'
|
||||||
|
keyRuneMap[sdl.SCANCODE_3] = '3'
|
||||||
|
keyRuneMap[sdl.SCANCODE_4] = '4'
|
||||||
|
keyRuneMap[sdl.SCANCODE_5] = '5'
|
||||||
|
keyRuneMap[sdl.SCANCODE_6] = '6'
|
||||||
|
keyRuneMap[sdl.SCANCODE_7] = '7'
|
||||||
|
keyRuneMap[sdl.SCANCODE_8] = '8'
|
||||||
|
keyRuneMap[sdl.SCANCODE_9] = '9'
|
||||||
|
keyRuneMap[sdl.SCANCODE_MINUS] = '-'
|
||||||
|
keyRuneMap[sdl.SCANCODE_EQUALS] = '='
|
||||||
|
keyRuneMap[sdl.SCANCODE_TAB] = '\t'
|
||||||
|
keyRuneMap[sdl.SCANCODE_Q] = 'Q'
|
||||||
|
keyRuneMap[sdl.SCANCODE_W] = 'W'
|
||||||
|
keyRuneMap[sdl.SCANCODE_E] = 'E'
|
||||||
|
keyRuneMap[sdl.SCANCODE_R] = 'R'
|
||||||
|
keyRuneMap[sdl.SCANCODE_T] = 'T'
|
||||||
|
keyRuneMap[sdl.SCANCODE_Y] = 'Y'
|
||||||
|
keyRuneMap[sdl.SCANCODE_U] = 'U'
|
||||||
|
keyRuneMap[sdl.SCANCODE_I] = 'I'
|
||||||
|
keyRuneMap[sdl.SCANCODE_O] = 'O'
|
||||||
|
keyRuneMap[sdl.SCANCODE_P] = 'P'
|
||||||
|
keyRuneMap[sdl.SCANCODE_LEFTBRACKET] = '['
|
||||||
|
keyRuneMap[sdl.SCANCODE_RIGHTBRACKET] = ']'
|
||||||
|
keyRuneMap[sdl.SCANCODE_RETURN] = '\n'
|
||||||
|
keyRuneMap[sdl.SCANCODE_A] = 'A'
|
||||||
|
keyRuneMap[sdl.SCANCODE_S] = 'S'
|
||||||
|
keyRuneMap[sdl.SCANCODE_D] = 'D'
|
||||||
|
keyRuneMap[sdl.SCANCODE_F] = 'F'
|
||||||
|
keyRuneMap[sdl.SCANCODE_G] = 'G'
|
||||||
|
keyRuneMap[sdl.SCANCODE_H] = 'H'
|
||||||
|
keyRuneMap[sdl.SCANCODE_J] = 'J'
|
||||||
|
keyRuneMap[sdl.SCANCODE_K] = 'K'
|
||||||
|
keyRuneMap[sdl.SCANCODE_L] = 'L'
|
||||||
|
keyRuneMap[sdl.SCANCODE_SEMICOLON] = ';'
|
||||||
|
keyRuneMap[sdl.SCANCODE_APOSTROPHE] = '\''
|
||||||
|
keyRuneMap[sdl.SCANCODE_GRAVE] = '`'
|
||||||
|
keyRuneMap[sdl.SCANCODE_BACKSLASH] = '\\'
|
||||||
|
keyRuneMap[sdl.SCANCODE_Z] = 'Z'
|
||||||
|
keyRuneMap[sdl.SCANCODE_X] = 'X'
|
||||||
|
keyRuneMap[sdl.SCANCODE_C] = 'C'
|
||||||
|
keyRuneMap[sdl.SCANCODE_V] = 'V'
|
||||||
|
keyRuneMap[sdl.SCANCODE_B] = 'B'
|
||||||
|
keyRuneMap[sdl.SCANCODE_N] = 'N'
|
||||||
|
keyRuneMap[sdl.SCANCODE_M] = 'M'
|
||||||
|
keyRuneMap[sdl.SCANCODE_COMMA] = ','
|
||||||
|
keyRuneMap[sdl.SCANCODE_PERIOD] = '.'
|
||||||
|
keyRuneMap[sdl.SCANCODE_SLASH] = '/'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_MULTIPLY] = '*'
|
||||||
|
keyRuneMap[sdl.SCANCODE_SPACE] = ' '
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_7] = '7'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_8] = '8'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_9] = '9'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_MINUS] = '-'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_4] = '4'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_5] = '5'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_6] = '6'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_PLUS] = '+'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_1] = '1'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_2] = '2'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_3] = '3'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_0] = '0'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_DECIMAL] = '.'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_EQUALS] = '='
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_ENTER] = '\n'
|
||||||
|
keyRuneMap[sdl.SCANCODE_KP_DIVIDE] = '/'
|
||||||
}
|
}
|
||||||
|
|
||||||
func keyName(s sdl.Scancode) string {
|
func keyName(s sdl.Scancode) string {
|
||||||
if int(s) >= len(keyMap) {
|
if int(s) >= len(keyNameMap) {
|
||||||
return "Unidentified"
|
return "Unidentified"
|
||||||
}
|
}
|
||||||
name := keyMap[s]
|
name := keyNameMap[s]
|
||||||
if name == "" {
|
if name == "" {
|
||||||
return "Unidentified"
|
return "Unidentified"
|
||||||
}
|
}
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func keyRune(s sdl.Scancode) rune {
|
||||||
|
if int(s) >= len(keyNameMap) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return keyRuneMap[s]
|
||||||
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package sdlcanvas
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
_ "image/gif"
|
_ "image/gif" // Imported here so that applications based on this package support these formats by default
|
||||||
_ "image/jpeg"
|
_ "image/jpeg"
|
||||||
_ "image/png"
|
_ "image/png"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
@ -43,29 +43,29 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) {
|
||||||
return nil, nil, fmt.Errorf("Error initializing SDL: %v", err)
|
return nil, nil, fmt.Errorf("Error initializing SDL: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sdl.GL_SetAttribute(sdl.GL_RED_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_RED_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_GREEN_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_GREEN_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_BLUE_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_BLUE_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_ALPHA_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_DEPTH_SIZE, 0)
|
sdl.GLSetAttribute(sdl.GL_DEPTH_SIZE, 0)
|
||||||
sdl.GL_SetAttribute(sdl.GL_STENCIL_SIZE, 8)
|
sdl.GLSetAttribute(sdl.GL_STENCIL_SIZE, 8)
|
||||||
sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1)
|
sdl.GLSetAttribute(sdl.GL_DOUBLEBUFFER, 1)
|
||||||
sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1)
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1)
|
||||||
sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4)
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4)
|
||||||
|
|
||||||
// create window
|
// create window
|
||||||
window, err := sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, w, h, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL)
|
window, err := sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, int32(w), int32(h), sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0)
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0)
|
||||||
sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0)
|
sdl.GLSetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0)
|
||||||
window, err = sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, w, h, sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL)
|
window, err = sdl.CreateWindow(title, sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, int32(w), int32(h), sdl.WINDOW_RESIZABLE|sdl.WINDOW_OPENGL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("Error creating window: %v", err)
|
return nil, nil, fmt.Errorf("Error creating window: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// create GL context
|
// create GL context
|
||||||
glContext, err := sdl.GL_CreateContext(window)
|
glContext, err := window.GLCreateContext()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, fmt.Errorf("Error creating GL context: %v", err)
|
return nil, nil, fmt.Errorf("Error creating GL context: %v", err)
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) {
|
||||||
return nil, nil, fmt.Errorf("Error initializing GL: %v", err)
|
return nil, nil, fmt.Errorf("Error initializing GL: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sdl.GL_SetSwapInterval(1)
|
sdl.GLSetSwapInterval(1)
|
||||||
gl.Enable(gl.MULTISAMPLE)
|
gl.Enable(gl.MULTISAMPLE)
|
||||||
|
|
||||||
err = canvas.LoadGL(goglimpl.GLImpl{})
|
err = canvas.LoadGL(goglimpl.GLImpl{})
|
||||||
|
@ -96,7 +96,7 @@ func CreateWindow(w, h int, title string) (*Window, *canvas.Canvas, error) {
|
||||||
|
|
||||||
// Destroy destroys the GL context and the window
|
// Destroy destroys the GL context and the window
|
||||||
func (wnd *Window) Destroy() {
|
func (wnd *Window) Destroy() {
|
||||||
sdl.GL_DeleteContext(wnd.GLContext)
|
sdl.GLDeleteContext(wnd.GLContext)
|
||||||
wnd.Window.Destroy()
|
wnd.Window.Destroy()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ func (wnd *Window) Close() {
|
||||||
|
|
||||||
// StartFrame handles events and gets the window ready for rendering
|
// StartFrame handles events and gets the window ready for rendering
|
||||||
func (wnd *Window) StartFrame() error {
|
func (wnd *Window) StartFrame() error {
|
||||||
err := sdl.GL_MakeCurrent(wnd.Window, wnd.GLContext)
|
err := wnd.Window.GLMakeCurrent(wnd.GLContext)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -143,17 +143,19 @@ func (wnd *Window) StartFrame() error {
|
||||||
wnd.MouseMove(int(e.X), int(e.Y))
|
wnd.MouseMove(int(e.X), int(e.Y))
|
||||||
handled = true
|
handled = true
|
||||||
}
|
}
|
||||||
case *sdl.KeyDownEvent:
|
case *sdl.KeyboardEvent:
|
||||||
|
if e.Type == sdl.KEYDOWN {
|
||||||
if wnd.KeyDown != nil {
|
if wnd.KeyDown != nil {
|
||||||
wnd.KeyDown(int(e.Keysym.Scancode), rune(e.Keysym.Unicode), keyName(e.Keysym.Scancode))
|
wnd.KeyDown(int(e.Keysym.Scancode), keyRune(e.Keysym.Scancode), keyName(e.Keysym.Scancode))
|
||||||
handled = true
|
handled = true
|
||||||
}
|
}
|
||||||
case *sdl.KeyUpEvent:
|
} else if e.Type == sdl.KEYUP {
|
||||||
if wnd.KeyUp != nil {
|
if wnd.KeyUp != nil {
|
||||||
wnd.KeyUp(int(e.Keysym.Scancode), rune(e.Keysym.Unicode), keyName(e.Keysym.Scancode))
|
wnd.KeyUp(int(e.Keysym.Scancode), keyRune(e.Keysym.Scancode), keyName(e.Keysym.Scancode))
|
||||||
handled = true
|
handled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !handled && wnd.Event != nil {
|
if !handled && wnd.Event != nil {
|
||||||
wnd.Event(event)
|
wnd.Event(event)
|
||||||
|
@ -181,7 +183,7 @@ func (wnd *Window) FinishFrame() {
|
||||||
wnd.fps = float32(wnd.frameCount-1) / float32(diff)
|
wnd.fps = float32(wnd.frameCount-1) / float32(diff)
|
||||||
}
|
}
|
||||||
|
|
||||||
sdl.GL_SwapWindow(wnd.Window)
|
wnd.Window.GLSwap()
|
||||||
}
|
}
|
||||||
|
|
||||||
// MainLoop runs a main loop and calls run on every frame
|
// MainLoop runs a main loop and calls run on every frame
|
||||||
|
@ -202,8 +204,8 @@ func (wnd *Window) MainLoop(run func()) {
|
||||||
}
|
}
|
||||||
case *sdl.QuitEvent:
|
case *sdl.QuitEvent:
|
||||||
wnd.close = true
|
wnd.close = true
|
||||||
case *sdl.KeyDownEvent:
|
case *sdl.KeyboardEvent:
|
||||||
if e.Keysym.Scancode == sdl.SCANCODE_ESCAPE {
|
if e.Type == sdl.KEYDOWN && e.Keysym.Scancode == sdl.SCANCODE_ESCAPE {
|
||||||
wnd.close = true
|
wnd.close = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue