// blitScreen swaps the buffers and clears the screen func (window *Screen) blitScreen() { C.SDL_GL_SwapWindow(window.sdlWindow) gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) window.elapsedTime = time.Since(window.frameTime).Seconds() window.frameTime = time.Now() }
// New returns a newly created Screen func New(width int, height int, fullscreen bool, FSAA int, name string) *Screen { window := &Screen{} C.SDL_Init(C.SDL_INIT_VIDEO) C.setGlContextAttributes() C.SDL_GL_SetAttribute(C.SDL_GL_DOUBLEBUFFER, 1) // Force hardware accel C.SDL_GL_SetAttribute(C.SDL_GL_ACCELERATED_VISUAL, 1) if FSAA > 0 { // FSAA (Fullscreen antialiasing) C.SDL_GL_SetAttribute(C.SDL_GL_MULTISAMPLEBUFFERS, 1) C.SDL_GL_SetAttribute(C.SDL_GL_MULTISAMPLESAMPLES, C.int(FSAA)) // 2, 4, 8 } flags := C.SDL_WINDOW_OPENGL | C.SDL_RENDERER_ACCELERATED if fullscreen { flags = flags | C.SDL_WINDOW_FULLSCREEN } C.SDL_CreateWindowAndRenderer(C.int(width), C.int(height), C.Uint32(flags), &window.sdlWindow, &window.renderer) C.SDL_SetWindowTitle(window.sdlWindow, C.CString(name)) C.SDL_GL_CreateContext(window.sdlWindow) if err := gl.Init(); err != nil { panic(err) } version := gl.GoStr(gl.GetString(gl.VERSION)) fmt.Println("OpenGL version", version) // Configure global settings gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.ClearColor(0.0, 0.0, 0.0, 1.0) gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT) window.Width = width window.Height = height window.name = name window.shouldClose = false C.SDL_GL_SwapWindow(window.sdlWindow) window.startTime = time.Now() window.frameTime = time.Now() C.SDL_GL_SetSwapInterval(1) window.vsync = true return window }
// Swaps OpenGL framebuffers/Update Display. func (w *Window) GL_SwapWindow() { C.SDL_GL_SwapWindow(w.cWindow) }
func GL_SwapWindow(_win *Window) { C.SDL_GL_SwapWindow(_win.window) }
func GL_SwapWindow(window *Window) { _window := (*C.SDL_Window)(unsafe.Pointer(window)) C.SDL_GL_SwapWindow(_window) }
func (win *Window) GL_Swap() { C.SDL_GL_SwapWindow(win.c) }
// GL_SwapWindow (https://wiki.libsdl.org/SDL_GL_SwapWindow) func GL_SwapWindow(window *Window) { C.SDL_GL_SwapWindow(window.cptr()) }
func Flip() { C.SDL_GL_SwapWindow(win) }
// Swaps OpenGL framebuffers/Update Display. func (w *Window) GL_SwapWindow() { GlobalMutex.Lock() C.SDL_GL_SwapWindow(w.cWindow) GlobalMutex.Unlock() }