// GL_CreateContext (https://wiki.libsdl.org/SDL_GL_CreateContext) func GL_CreateContext(window *Window) (GLContext, error) { c := GLContext(C.SDL_GL_CreateContext(window.cptr())) if c == nil { return nil, GetError() } return c, nil }
func InitGL(width, height, msaa int, fullscreen bool) { C.SDL_Init(C.SDL_INIT_VIDEO) C.SDL_VideoInit( /*nil*/ C.SDL_GetVideoDriver(0)) C.SDL_GL_SetAttribute(C.SDL_GL_CONTEXT_MAJOR_VERSION, 3) C.SDL_GL_SetAttribute(C.SDL_GL_CONTEXT_MINOR_VERSION, 2) if msaa != 0 { C.SDL_GL_SetAttribute(C.SDL_GL_MULTISAMPLEBUFFERS, 1) C.SDL_GL_SetAttribute(C.SDL_GL_MULTISAMPLESAMPLES, C.int(msaa)) } C.SDL_GL_SetAttribute(C.SDL_GL_DEPTH_SIZE, 16) //win = C.SDL_CreateWindow(nil, C.SDL_WINDOWPOS_CENTERED, C.SDL_WINDOWPOS_CENTERED,C.int(width), C.int(height), C.SDL_WINDOW_OPENGL) if fullscreen { win = C.SDL_CreateWindow(nil, C.SDL_WINDOWPOS_CENTERED, C.SDL_WINDOWPOS_CENTERED, C.int(width), C.int(height), C.SDL_WINDOW_OPENGL|C.SDL_WINDOW_FULLSCREEN_DESKTOP) } else { win = C.SDL_CreateWindow(nil, C.SDL_WINDOWPOS_CENTERED, C.SDL_WINDOWPOS_CENTERED, C.int(width), C.int(height), C.SDL_WINDOW_OPENGL) } C.SDL_ShowWindow(win) wat := C.SDL_GL_CreateContext(win) fmt.Println(C.GoString(C.SDL_GetVideoDriver(0))) C.SDL_GL_MakeCurrent(win, wat) //C.SDL_GL_SetSwapInterval(1) C.glEnable(C.GL_DEPTH_TEST) C.glDepthFunc(C.GL_LEQUAL) C.glClearColor(0.3, 0.5, 1, 0) C.glClear(C.GL_COLOR_BUFFER_BIT | C.GL_DEPTH_BUFFER_BIT) printerr("failed to initialize openGL") }
func (win *Window) GL_CreateContext() (GLContext, error) { ctx := C.SDL_GL_CreateContext(win.c) if ctx == nil { return 0, getError() } return GLContext(ctx), nil }
// 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 }
func GL_CreateContext(_win *Window) *GLContext { context := GLContext(C.SDL_GL_CreateContext(_win.window)) return &context }
func (w *Window) GL_CreateContext() { C.SDL_GL_CreateContext(w.cWindow) }
func GL_CreateContext(window *Window) GLContext { _window := (*C.SDL_Window)(unsafe.Pointer(window)) return (GLContext)(C.SDL_GL_CreateContext(_window)) }
func (w *Window) GL_CreateContext() { GlobalMutex.Lock() C.SDL_GL_CreateContext(w.cWindow) GlobalMutex.Unlock() }
func GL_CreateContext(window *Window) GLContext { return GLContext(C.SDL_GL_CreateContext(window.cptr())) }