func (w Window) init() error { sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1) sdl.GL_SetAttribute(sdl.GL_RED_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_GREEN_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_BLUE_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 8) return nil }
// Set hints on the context func setGLContextAttributes(versionMajor, versionMinor int, debug bool) { var profilemask, contextflags int if debug { profilemask = profilemask | sdl.GL_CONTEXT_PROFILE_COMPATIBILITY contextflags = contextflags | sdl.GL_CONTEXT_DEBUG_FLAG } sdl.GL_SetAttribute(sdl.GL_CONTEXT_MAJOR_VERSION, versionMajor) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MINOR_VERSION, versionMinor) sdl.GL_SetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, profilemask) sdl.GL_SetAttribute(sdl.GL_CONTEXT_FLAGS, contextflags) }
func (w Window) init() error { sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1) sdl.GL_SetAttribute(sdl.GL_RED_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_GREEN_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_BLUE_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 8) if err := gl.Init(); err != nil { return errors.New("Cannot initialize OGL: ") } gl.Viewport(0, 0, int32(w.Width), int32(w.Height)) Opengl.CreateBuffers(w.Width, w.Height) return nil }
func main() { var ( err error window *sdl.Window context sdl.GLContext ) if err = sdl.Init(sdl.INIT_EVERYTHING); err != nil { panic(err) } defer sdl.Quit() sdl.GL_SetAttribute(sdl.GL_CONTEXT_MAJOR_VERSION, 3) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MINOR_VERSION, 2) sdl.GL_SetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_CORE) window, err = sdl.CreateWindow(winTitle, sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, winWidth, winHeight, sdl.WINDOW_OPENGL) if err != nil { panic(err) } defer window.Destroy() context, err = sdl.GL_CreateContext(window) if err != nil { panic(err) } defer sdl.GL_DeleteContext(context) if err = sdl.GL_MakeCurrent(window, context); err != nil { panic(err) } if err = gl.Init(); err != nil { panic(err) } printGLInfo() cameraMatrixUniform := setupGL() windowLoop(window, cameraMatrixUniform) }
func TestTexture(t *testing.T) { if sdl.Init(sdl.INIT_EVERYTHING) != 0 { panic(sdl.GetError()) } defer sdl.Quit() window := sdl.CreateWindow("test", 0, 0, 320, 200, sdl.WINDOW_HIDDEN|sdl.WINDOW_OPENGL) defer window.Destroy() sdl.GL_SetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_ES) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MAJOR_VERSION, 2) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MINOR_VERSION, 0) glctx := sdl.GL_CreateContext(window) defer sdl.GL_DeleteContext(glctx) tex := gl.CreateTexture() gl.BindTexture(gl.TEXTURE_2D, tex) if !gl.IsTexture(tex) { t.Error(tex, "is not a texture") } }
func main() { var ( err error window *sdl.Window context sdl.GLContext ) if err = sdl.Init(sdl.INIT_EVERYTHING); err != nil { panic(err) } defer sdl.Quit() sdl.GL_SetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_COMPATIBILITY) window, err = sdl.CreateWindow(winTitle, sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, winWidth, winHeight, sdl.WINDOW_OPENGL) if err != nil { panic(err) } defer window.Destroy() context, err = sdl.GL_CreateContext(window) if err != nil { panic(err) } defer sdl.GL_DeleteContext(context) if err = sdl.GL_MakeCurrent(window, context); err != nil { panic(err) } if err = gl.Init(); err != nil { panic(err) } sdl.GL_SetSwapInterval(1) printGLInfo() setupGL() windowLoop(window) }
func initGL(window *sdl.Window) sdl.GLContext { // sdl.GL_SetAttribute(sdl.GL_CONTEXT_FLAGS, sdl.GL_CONTEXT_DEBUG_FLAG) sdl.GL_SetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_CORE) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MAJOR_VERSION, 3) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MINOR_VERSION, 2) sdl.GL_SetAttribute(sdl.GL_CONTEXT_FLAGS, sdl.GL_CONTEXT_FORWARD_COMPATIBLE_FLAG) sdl.GL_SetAttribute(sdl.GL_ACCELERATED_VISUAL, 1) sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1) sdl.GL_SetAttribute(sdl.GL_DEPTH_SIZE, 24) context, err := sdl.GL_CreateContext(window) if err != nil { panic(err) } if err := gl.InitGlew(); err != nil { panic(err) } return context }
// Set hints on the sdl framebuffer func setGLFramebufferAttributes(msaa int, sRGB bool) { // Set GL window / framebuffer attributes. sdl.GL_SetAttribute(sdl.GL_RED_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_GREEN_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_BLUE_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_ALPHA_SIZE, 8) sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1) sdl.GL_SetAttribute(sdl.GL_STENCIL_SIZE, 1) sdl.GL_SetAttribute(sdl.GL_RETAINED_BACKING, 0) if msaa > 0 { sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 1) sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, msaa) } else { sdl.GL_SetAttribute(sdl.GL_MULTISAMPLEBUFFERS, 0) sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 0) } }
func main() { runtime.LockOSThread() flag.Parse() if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() } if err := sdl.Init(sdl.INIT_EVERYTHING); err != nil { panic(err) } defer sdl.Quit() sdl.GL_SetAttribute(sdl.GL_MULTISAMPLESAMPLES, 4) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MAJOR_VERSION, 3) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MINOR_VERSION, 3) sdl.GL_SetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_CORE) sdl.GL_SetAttribute(sdl.GL_DOUBLEBUFFER, 1) sdl.GL_SetAttribute(sdl.GL_DEPTH_SIZE, 24) sdl.GL_SetAttribute(sdl.GL_CONTEXT_FLAGS, sdl.GL_CONTEXT_DEBUG_FLAG|sdl.GL_CONTEXT_FORWARD_COMPATIBLE_FLAG) window, err := sdl.CreateWindow("TOW", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED, 1024, 768, sdl.WINDOW_OPENGL|sdl.WINDOW_SHOWN|sdl.WINDOW_RESIZABLE) if err != nil { log.Fatal("can't create window", err) } defer window.Destroy() //defer renderer.Destroy() glcontext, err := sdl.GL_CreateContext(window) if err != nil { log.Fatal("can't create context", err) } defer sdl.GL_DeleteContext(glcontext) sdl.GL_MakeCurrent(window, glcontext) //err := gl.GlewInit() //fmt.Println(gl.GlewGetErrorString(err)) //glew init gl.Init() sdl.GL_SetSwapInterval(1) fmt.Println("glVersion", gl.GetString(gl.VERSION)) tw.Init(tw.OPENGL_CORE, nil) defer tw.Terminate() gl.GetError() // Ignore error debugContext.InitDebugContext() world := generation.GenerateWorld(64, 64, 2) gs := gamestate.NewGameState(window, world) defer gs.Delete() worldRenderer := rendering.NewWorldRenderer(window, gs.World) defer worldRenderer.Delete() gs.Bar.AddButton("screen shot", worldRenderer.ScreenShot, "") MainLoop(gs, worldRenderer) if *memprofile != "" { f, err := os.Create(*memprofile) if err != nil { panic(err) } pprof.WriteHeapProfile(f) f.Close() return } }
func TestBindVariables(t *testing.T) { if sdl.Init(sdl.INIT_EVERYTHING) != 0 { panic(sdl.GetError()) } window := sdl.CreateWindow("test", 0, 0, 320, 200, sdl.WINDOW_HIDDEN|sdl.WINDOW_OPENGL) sdl.GL_SetAttribute(sdl.GL_CONTEXT_PROFILE_MASK, sdl.GL_CONTEXT_PROFILE_ES) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MAJOR_VERSION, 2) sdl.GL_SetAttribute(sdl.GL_CONTEXT_MINOR_VERSION, 0) glctx := sdl.GL_CreateContext(window) vs := gl.CreateShader(gl.VERTEX_SHADER) vs.Source(` uniform mat4 u_projection; uniform vec2 u_size; attribute vec2 a_vertex; attribute vec2 a_texcoord; varying vec2 v_texcoord; void main() { v_texcoord = a_texcoord; gl_Position = u_projection * vec4(a_vertex * u_size, 0, 1); } `) vs.Compile() fs := gl.CreateShader(gl.FRAGMENT_SHADER) fs.Source(` precision mediump float; uniform sampler2D u_tex; uniform vec4 u_color; varying vec2 v_texcoord; void main() { gl_FragColor = texture2D(u_tex, v_texcoord).a * u_color; } `) fs.Compile() p := gl.CreateProgram() p.AttachShader(vs) p.AttachShader(fs) p.Link() var v struct { Proj gl.UniformMatrix4f `glsl:"u_projection"` Size gl.Uniform2f `glsl:"u_size"` Tex gl.Uniform1i `glsl:"u_tex"` Color gl.Uniform4f `glsl:"u_color"` Vertices gl.Vec2Attrib `glsl:"a_vertex"` TexCoords gl.Vec2Attrib `glsl:"a_texcoord"` } p.BindVariables(&v) uniforms := []gl.Uniform{v.Proj, v.Size, v.Tex, v.Color} cksum := 0 for _, u := range uniforms { cksum |= 1 << uint(u.Location()) } if cksum != 0xF { t.Errorf("unexpected uniform locations: %#x", cksum) } attributes := []gl.VertexAttrib{v.Vertices, v.TexCoords} cksum = 0 for _, a := range attributes { cksum |= 1 << uint(a.Index()) } if cksum != 0x3 { t.Errorf("unexpected attribute locations: %#x", cksum) } sdl.GL_DeleteContext(glctx) window.Destroy() sdl.Quit() }