// initGL initializes GLFW and OpenGL. func initGL() error { err := glfw.Init() if err != nil { return err } err = glfw.OpenWindow(AtlasSize, AtlasSize, 8, 8, 8, 8, 0, 0, glfw.Windowed) if err != nil { glfw.Terminate() return err } glfw.SetWindowTitle("Texture atlas example") glfw.SetSwapInterval(1) glfw.SetWindowSizeCallback(onResize) glfw.SetKeyCallback(onKey) gl.Init() if err = glh.CheckGLError(); err != nil { return err } gl.Disable(gl.DEPTH_TEST) gl.Disable(gl.LIGHTING) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.ClearColor(0.2, 0.2, 0.23, 1.0) return nil }
// initGL initializes GLFW and OpenGL. func initGL() error { err := glfw.Init() if err != nil { return err } glfw.OpenWindowHint(glfw.FsaaSamples, 4) err = glfw.OpenWindow(512, 512, 8, 8, 8, 8, 0, 0, glfw.Windowed) if err != nil { glfw.Terminate() return err } glfw.SetWindowTitle("Meshbuffer 2D example") glfw.SetSwapInterval(1) glfw.SetWindowSizeCallback(onResize) glfw.SetKeyCallback(onKey) gl.Init() if err = glh.CheckGLError(); err != nil { return err } gl.Disable(gl.DEPTH_TEST) gl.Enable(gl.MULTISAMPLE) gl.Disable(gl.LIGHTING) gl.Enable(gl.COLOR_MATERIAL) gl.ClearColor(0.2, 0.2, 0.23, 1.0) return nil }
// NewRenderer creates a new Renderer with the given window size and title. func NewRenderer(window *Window) (*Renderer, error) { logger.Debug("Initializing GLEW") // Init glew if gl.Init() != 0 { return nil, errors.New("Could not initialise glew.") } gl.GetError() if window.Settings.ClearColor != nil { color := window.Settings.ClearColor gl.ClearColor( gl.GLclampf(color.R()), gl.GLclampf(color.G()), gl.GLclampf(color.B()), 0., ) } gl.Enable(gl.DEPTH_TEST) gl.DepthFunc(gl.LESS) gl.Enable(gl.CULL_FACE) // Vertex buffers vertexArray := gl.GenVertexArray() vertexArray.Bind() renderer := Renderer{ vertexArray: vertexArray, window: window, } return &renderer, nil }
func (m *Map) Draw() { // gl.Enable(gl.PRIMITIVE_RESTART) // gl.PrimitiveRestartIndex(PRIMITIVE_RESTART) gl.EnableClientState(gl.VERTEX_ARRAY) gl.Translatef(float32(m.gridSize/2), float32(m.gridSize/2), 0) if m.renderSmooth { gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Enable(gl.POLYGON_SMOOTH) gl.Hint(gl.POLYGON_SMOOTH_HINT, gl.NICEST) } if m.renderMode == 1 { gl.LineWidth(1) gl.VertexPointer(2, gl.FLOAT, 0, m.gridLines) gl.Color3f(0.2, 0.2, 0.2) gl.DrawArrays(gl.LINES, 0, len(m.gridLines)/2) gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE) } for _, vl := range m.vl { if len(vl.vertices) > 0 { gl.VertexPointer(2, gl.FLOAT, 0, vl.vertices) gl.Color3f(vl.colors[0], vl.colors[1], vl.colors[2]) gl.DrawElements(gl.TRIANGLES, len(vl.indices), gl.UNSIGNED_INT, vl.indices) } } }
func (r *RenderTarget) resetGlStates() { // Define the default OpenGL states gl.Disable(gl.CULL_FACE) gl.Disable(gl.LIGHTING) gl.Disable(gl.DEPTH_TEST) gl.Disable(gl.ALPHA_TEST) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.BLEND) gl.MatrixMode(gl.MODELVIEW) gl.EnableClientState(gl.VERTEX_ARRAY) gl.EnableClientState(gl.COLOR_ARRAY) gl.EnableClientState(gl.TEXTURE_COORD_ARRAY) r.glStatesSet = true // Apply the default SFML states r.applyBlendMode(BlendAlpha) r.applyTransform(IdentityTransform()) r.applyTexture(nil) /*if (Shader::isAvailable()){ r.applyShader(nil) }*/ r.useVertexCache = false // Set the default view r.SetView(r.View()) }
func (pen *Pen) lineTo(x, y int) { gl.Enable(gl.BLEND) gl.Enable(gl.POINT_SMOOTH) gl.Enable(gl.LINE_SMOOTH) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Color4f(0.0, 0.0, 0.0, 0.1) gl.Begin(gl.LINES) var p [2]int for i := range pen.points { p = pen.points[i] if p[0] == 0 && p[1] == 0 { continue } if distanceTo(x, y, p[0], p[1]) < 10.0 { gl.Vertex2i(x, y) gl.Vertex2i(p[0], p[1]) } } gl.End() pen.n = (pen.n + 1) % len(pen.points) pen.points[pen.n][0] = x pen.points[pen.n][1] = y pen.moveTo(x, y) }
func initGL() (err error) { goph, err := os.Open(texturefiles[0]) if err != nil { panic(err) } defer goph.Close() texture, err = createTexture(goph) gl.ShadeModel(gl.SMOOTH) gl.ClearColor(0, 0, 0, 0.5) gl.ClearDepth(1) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE) // 设置混色函数取得半透明效果 gl.Enable(gl.BLEND) gl.Enable(gl.TEXTURE_2D) rand.Seed(time.Now().Unix()) for loop = 0; loop < num; loop++ { star[loop].angle = 0.0 star[loop].dist = float32(loop) / num * 5 //fmt.Println(loop, star[loop].dist) star[loop].r = uint8(rand.Int() % 256) star[loop].g = uint8(rand.Int() % 256) star[loop].b = uint8(rand.Int() % 256) } return }
// initGL initializes GLFW and OpenGL. func initGL(c *cpu.CPU, width, height int) error { err := glfw.Init() if err != nil { return err } glfw.OpenWindowHint(glfw.WindowNoResize, 1) err = glfw.OpenWindow(width, height, 8, 8, 8, 8, 8, 0, glfw.Windowed) if err != nil { glfw.Terminate() return err } glfw.SetWindowTitle("DCPU") glfw.SetSwapInterval(1) glfw.SetWindowSizeCallback(onResize) gl.Init() err = glh.CheckGLError() if err != nil { return err } gl.Disable(gl.LIGHTING) gl.Disable(gl.DEPTH_TEST) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.ClearColor(0, 0, 0, 1) return err }
func initScene() (err error) { gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.LIGHTING) gl.ClearColor(0.5, 0.5, 0.5, 0.0) gl.ClearDepth(1) gl.DepthFunc(gl.LEQUAL) gl.Lightfv(gl.LIGHT0, gl.AMBIENT, ambient) gl.Lightfv(gl.LIGHT0, gl.DIFFUSE, diffuse) gl.Lightfv(gl.LIGHT0, gl.POSITION, lightpos) gl.Enable(gl.LIGHT0) gl.Viewport(0, 0, Width, Height) gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Frustum(-1, 1, -1, 1, 1.0, 10.0) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() goph, err := os.Open("../../data/gopher.png") if err != nil { panic(err) } defer goph.Close() texture, err = createTexture(goph) return }
// Opens a new window. func (c *Controller) Open(win *Window) (err error) { c.Win = win mode := glfw.Windowed if win.Fullscreen { mode = glfw.Fullscreen } if win.Resize == false { glfw.OpenWindowHint(glfw.WindowNoResize, 1) } if err = glfw.OpenWindow(win.Width, win.Height, 0, 0, 0, 0, 0, 0, mode); err != nil { return } gl.Init() gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) v1, v2, v3 := glfw.GLVersion() log.Printf("OpenGL version: %v %v %v\n", v1, v2, v3) fb_supported := glfw.ExtensionSupported("GL_EXT_framebuffer_object") log.Printf("Framebuffer supported: %v\n", fb_supported) c.SetClearColor(0, 0, 0, 0) if win.VSync == true { glfw.SetSwapInterval(1) // Limit to refresh } glfw.SetWindowTitle(win.Title) glfw.SetWindowSizeCallback(func(w, h int) { log.Printf("Resizing window to %v, %v\n", w, h) c.resize() }) err = c.resize() return }
func (s *System) draw() { s.cmds <- func() { gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.BLEND) gl.DepthFunc(gl.LEQUAL) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.PolygonMode(gl.FRONT_AND_BACK, gl.FILL) //s.shader.Use() //s.shader.AssignUniforms(uniforms) } for _, _ = range s.meshes.layouts { s.submit(renderState{}) } for i := range s.buckets { list := &s.buckets[i] list.sort() s.cmds <- list.execute } return /* s.cmds <- func() { for _, geom := range geoms { // gl state // texture units // uniforms //shader.AssignUniforms() shader.SetGeometry(&geom) shader.Draw() } } */ }
func initGL() (err error) { if err = loadTextures(); err != nil { return } gl.ShadeModel(gl.SMOOTH) gl.ClearColor(0, 0, 0, 0) gl.ClearDepth(1) gl.DepthFunc(gl.LEQUAL) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) gl.Enable(gl.TEXTURE_2D) gl.Enable(gl.DEPTH_TEST) //alpha通道的值为 0.0意味着物体材质是完全透明的。1.0 则意味着完全不透明 //以全亮度绘制此物体,并对其进行50%的alpha混合(半透明)。 //当混合选项打开时,此物体将会产生50%的透明效果 gl.Color4f(1, 1, 1, 0.5) //全亮度, 50% Alpha 混合 gl.BlendFunc(gl.SRC_ALPHA, gl.ONE) //基于源象素alpha通道值的半透明混合函数 gl.Lightfv(gl.LIGHT1, gl.AMBIENT, ambient) gl.Lightfv(gl.LIGHT1, gl.AMBIENT, diffuse) gl.Lightfv(gl.LIGHT1, gl.POSITION, lightpos) gl.Enable(gl.LIGHT1) return }
func initGL() (err error) { if err = loadTextures(); err != nil { return } gl.ShadeModel(gl.SMOOTH) /// 启用阴影平滑,设置平滑着色,阴影平滑通过多边形精细的混合色彩,并对外部光进行平滑 /* 色彩值的范围从0.0f到1.0f。0.0f代表最黑的情况,1.0f就是最亮的情况。 glClearColor 后的第一个参数是Red Intensity(红色分量),第二个是绿色,第三个是蓝色。最大值也是1.0f,代表特定颜色分量的最亮情况。 最后一个参数是Alpha值。当它用来清除屏幕的时候,我们不用关心第四个数字。现在让它为0.0f. */ gl.ClearColor(0, 0, 0, 0) ///设置清除屏幕时所用的颜色,黑色背景 /* 接下来的三行必须做的是关于depth buffer(深度缓存)的。将深度缓存设想为屏幕后面的层。 深度缓存不断的对物体进入屏幕内部有多深进行跟踪。 本程序其实没有真正使用深度缓存,但几乎所有在屏幕上显示3D场景OpenGL程序都使用深度缓存。 它的排序决定那个物体先画。这样您就不会将一个圆形后面的正方形画到圆形上来。深度缓存是OpenGL十分重要的部分。 */ gl.ClearDepth(1) ///设置深度缓存 gl.DepthFunc(gl.LEQUAL) ///所作深度测试的类型 gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) ///告诉系统对透视进行修正,这会十分轻微的影响性能。但使得透视图看起来好一点 gl.Enable(gl.DEPTH_TEST) ///启用深度测试 gl.Enable(gl.TEXTURE_2D) ///启用纹理映射 return }
// OpenGL draw function func draw() { gl.Clear(gl.COLOR_BUFFER_BIT) gl.Enable(gl.BLEND) gl.Enable(gl.POINT_SMOOTH) gl.Enable(gl.LINE_SMOOTH) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.LoadIdentity() gl.Begin(gl.LINES) gl.Color3f(.2, .2, .2) for i := range staticLines { x := staticLines[i].GetAsSegment().A.X y := staticLines[i].GetAsSegment().A.Y gl.Vertex3f(float32(x), float32(y), 0) x = staticLines[i].GetAsSegment().B.X y = staticLines[i].GetAsSegment().B.Y gl.Vertex3f(float32(x), float32(y), 0) } gl.End() gl.Color4f(.3, .3, 1, .8) // draw balls for _, ball := range balls { gl.PushMatrix() pos := ball.Body.Position() rot := ball.Body.Angle() * chipmunk.DegreeConst gl.Translatef(float32(pos.X), float32(pos.Y), 0.0) gl.Rotatef(float32(rot), 0, 0, 1) drawCircle(float64(ballRadius), 60) gl.PopMatrix() } }
// Binds the framebuffer for drawing. func (fb *Framebuffer) Bind() { fb.Buffer.Bind() gl.Viewport(0, 0, fb.Width, fb.Height) gl.Enable(gl.TEXTURE_2D) gl.Disable(gl.DEPTH_TEST) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Enable(gl.BLEND) }
func main() { _ = fmt.Sprint() if !glfw.Init() { panic("Can't init glfw!") } defer glfw.Terminate() // antialiasing //glfw.WindowHint(glfw.Samples, 4) window, err = glfw.CreateWindow(WindowWidth, WindowHeight, "Mozaik", nil, nil) if err != nil { panic(err) } defer window.Destroy() // Ensure thread context window.MakeContextCurrent() //glfw.SwapInterval(1) window.SetKeyCallback(keyCb) window.SetMouseButtonCallback(mouseCb) gl.Init() gl.ClearColor(0.9, 0.85, 0.46, 0.0) // useless in 2D gl.Disable(gl.DEPTH_TEST) // antialiasing gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Enable(gl.LINE_SMOOTH) for i := int32(32); i < 72; i++ { font := loadFonts(i) defer font.Release() fonts = append(fonts, font) } // Compute window radius windowRadius = math.Sqrt(math.Pow(WindowHeight, 2) + math.Pow(WindowWidth, 2)) // Use window coordinates gl.MatrixMode(gl.PROJECTION) gl.LoadIdentity() gl.Ortho(0, WindowWidth, WindowHeight, 0, 0, 1) gl.MatrixMode(gl.MODELVIEW) gl.LoadIdentity() g = NewGame() g.Start() go eventLoop(g) go renderLoop(g) Main() g.Stop() }
func (w *Window) renderInit() { //bounds := w.body.Bounds() gl.Disable(gl.MULTISAMPLE) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.PolygonMode(gl.FRONT_AND_BACK, gl.FILL) //gl.Viewport(0, 0, bounds.Max.X, bounds.Max.Y) gl.ClearDepth(1) gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT | gl.STENCIL_BUFFER_BIT) }
func initGL() error { gl.Init() if err := glh.CheckGLError(); err != nil { return err } gl.Disable(gl.DEPTH_TEST) gl.Enable(gl.MULTISAMPLE) gl.Disable(gl.LIGHTING) gl.Enable(gl.COLOR_MATERIAL) gl.ClearColor(0, 0, 0, 1) return nil }
func initGL() (err error) { if err = loadTextures(); err != nil { return } gl.ShadeModel(gl.SMOOTH) gl.ClearColor(0, 0, 0, 0) gl.ClearDepth(1) gl.DepthFunc(gl.LEQUAL) gl.Hint(gl.PERSPECTIVE_CORRECTION_HINT, gl.NICEST) gl.Enable(gl.DEPTH_TEST) gl.Enable(gl.TEXTURE_2D) return }
func (sg *OpenGLGraphics) Rect(x, y, w, h int, style chart.Style) { // log.Panicf("Unimplemented: %s", whoami()) x, y, w, h = chart.SanitizeRect(x, y, w, h, style.LineWidth) defer glh.OpenGLSentinel()() // glh.With(glh.Attrib{gl.ENABLE_BIT | gl.COLOR_BUFFER_BIT}, func() { glh.ColorC(style.FillColor) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Begin(gl.QUADS) glh.Squarei(x, y, w, h) gl.End() }) if style.LineWidth != 0 { gl.LineWidth(float32(style.LineWidth)) //log.Print("Linewidth: ", float32(style.LineWidth)) glh.With(glh.Attrib{gl.ENABLE_BIT | gl.COLOR_BUFFER_BIT}, func() { glh.ColorC(style.LineColor) gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Begin(gl.LINE_LOOP) glh.Squarei(x, y, w, h) gl.End() }) } // linecol := style.LineColor // if linecol != "" { // s = fmt.Sprintf("stroke:%s; ", linecol) // } else { // linecol = "#808080" // } // s += fmt.Sprintf("stroke-width: %d; ", style.LineWidth) // s += fmt.Sprintf("opacity: %.2f; ", 1-style.Alpha) // if style.FillColor != "" { // s += fmt.Sprintf("fill: %s; fill-opacity: %.2f", style.FillColor, 1-style.Alpha) // } else { // s += "fill-opacity: 0" // } // sg.svg.Rect(x, y, w, h, s) // GenericRect(sg, x, y, w, h, style) // TODO }
// program & OpenGL initialization func Init() { pos := []float32{5.0, 5.0, 10.0, 0.0} red := []float32{0.8, 0.1, 0.0, 1.0} green := []float32{0.0, 0.8, 0.2, 1.0} blue := []float32{0.2, 0.2, 1.0, 1.0} gl.Lightfv(gl.LIGHT0, gl.POSITION, pos) gl.Enable(gl.CULL_FACE) gl.Enable(gl.LIGHTING) gl.Enable(gl.LIGHT0) gl.Enable(gl.DEPTH_TEST) // make the gears gear1 = gl.GenLists(1) gl.NewList(gear1, gl.COMPILE) gl.Materialfv(gl.FRONT, gl.AMBIENT_AND_DIFFUSE, red) gear(1.0, 4.0, 1.0, 20, 0.7) gl.EndList() gear2 = gl.GenLists(1) gl.NewList(gear2, gl.COMPILE) gl.Materialfv(gl.FRONT, gl.AMBIENT_AND_DIFFUSE, green) gear(0.5, 2.0, 2.0, 10, 0.7) gl.EndList() gear3 = gl.GenLists(1) gl.NewList(gear3, gl.COMPILE) gl.Materialfv(gl.FRONT, gl.AMBIENT_AND_DIFFUSE, blue) gear(1.3, 2.0, 0.5, 10, 0.7) gl.EndList() gl.Enable(gl.NORMALIZE) // Parse command line options info := flag.Bool("info", false, "Info") autoexit = flag.Int("exit", 30, "Auto Exit after n seconts\n") flag.Parse() if *info { fmt.Printf("gl.RENDERER = %s\n", gl.GetString(gl.RENDERER)) fmt.Printf("gl.VERSION = %s\n", gl.GetString(gl.VERSION)) fmt.Printf("gl.VENDOR = %s\n", gl.GetString(gl.VENDOR)) fmt.Printf("gl.EXTENSIONS = %s\n", gl.GetString(gl.EXTENSIONS)) os.Exit(1) } }
func main() { if !glfw.Init() { log.Fatal("glfw failed to initialize") } defer glfw.Terminate() window, err := glfw.CreateWindow(640, 480, "Deformable", nil, nil) if err != nil { log.Fatal(err.Error()) } window.MakeContextCurrent() glfw.SwapInterval(1) window.SetMouseButtonCallback(handleMouseButton) window.SetKeyCallback(handleKeyDown) window.SetInputMode(glfw.Cursor, glfw.CursorHidden) gl.Init() initGL() i := 16 m = GenerateMap(1600/i, 1200/i, i) for running && !window.ShouldClose() { x, y := window.GetCursorPosition() if drawing != 0 { m.Add(int(x)+int(camera[0]), int(y)+int(camera[1]), drawing, brushSizes[currentBrushSize]) } gl.Clear(gl.COLOR_BUFFER_BIT) gl.LoadIdentity() gl.PushMatrix() gl.PushAttrib(gl.CURRENT_BIT | gl.ENABLE_BIT | gl.LIGHTING_BIT | gl.POLYGON_BIT | gl.LINE_BIT) gl.Translatef(-camera[0], -camera[1], 0) m.Draw() gl.PopAttrib() gl.PopMatrix() gl.PushAttrib(gl.COLOR_BUFFER_BIT) gl.LineWidth(2) gl.Enable(gl.BLEND) gl.BlendFunc(gl.ONE_MINUS_DST_COLOR, gl.ZERO) // gl.Enable(gl.LINE_SMOOTH) // gl.Hint(gl.LINE_SMOOTH_HINT, gl.NICEST) gl.Translatef(float32(x), float32(y), 0) gl.EnableClientState(gl.VERTEX_ARRAY) gl.VertexPointer(2, gl.DOUBLE, 0, cursorVerts) gl.DrawArrays(gl.LINE_LOOP, 0, 24) gl.PopAttrib() window.SwapBuffers() glfw.PollEvents() } }
func (sg *OpenGLGraphics) Line(x0, y0, x1, y1 int, style chart.Style) { //log.Panicf("Unimplemented: %s", whoami()) defer glh.OpenGLSentinel()() gl.LineWidth(float32(style.LineWidth)) // TODO: line stipple? //sc := chart.Color2RGBA(style.LineColor, uint8(style.Alpha*255)) //log.Printf("color: %s %d %d %d %d", style.FillColor, sc.R, sc.G, sc.B, sc.A) glh.ColorC(style.LineColor) //sc := style.LineColor //gl.Color4ub(sc.R, sc.G, sc.B, sc.A) // TODO: Check this works glh.With(glh.Attrib{gl.ENABLE_BIT | gl.COLOR_BUFFER_BIT}, func() { gl.Enable(gl.BLEND) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) glh.With(glh.Primitive{gl.LINES}, func() { gl.Vertex2i(x0, y0) gl.Vertex2i(x1, y1) }) }) }
// Initialize the window. Returns an error if glfw or glew throws one. func InitWindow(width, height int) error { Width, Height = width, height err := glfw.Init() if err != nil { return err } err = glfw.OpenWindow(Width, Height, 0, 0, 0, 32, 32, 32, glfw.Windowed) if err != nil { return err } WindowOpened = true glfw.SetWindowTitle("Goliath") glfw.Enable(glfw.KeyRepeat) if ret := gl.Init(); ret != 0 { return fmt.Errorf("failed to initialize GLEW: %d", ret) } // Set GL states gl.ClearColor(0.0, 0.0, 0.0, 1.0) gl.Enable(gl.CULL_FACE) gl.CullFace(gl.BACK) gl.FrontFace(gl.CCW) err = InitShaders() if err != nil { return err } InitCamera(Width, Height) return nil }
func onKey(key, state int) { switch key { case glfw.KeyEsc: running = false case 76: // L if state == 1 { if light = !light; !light { gl.Disable(gl.LIGHTING) } else { gl.Enable(gl.LIGHTING) } } case 70: // F if state == 1 { if filter++; filter >= len(textures) { filter = 0 } } case glfw.KeyPageup: z -= 0.2 case glfw.KeyPagedown: z += 0.2 case glfw.KeyUp: speed[0] -= 0.1 case glfw.KeyDown: speed[0] += 0.1 case glfw.KeyLeft: speed[1] -= 0.1 case glfw.KeyRight: speed[1] += 0.1 } }
func OpenGLInit() *OpenGL { g := &OpenGL{ QuadraticDrawer: newQuadraticDrawer(), TriangleDrawer: newTriangleDrawer(), FillDrawer: newFillDrawer(), } g.QuadraticDrawConfig = &QuadraticDrawConfig{glProgramInfo{g.QuadraticDrawer.program}, false} g.QuadraticDrawer.AddConfig(g.QuadraticDrawConfig) g.GlColorConfig = &GlColorConfig{glProgramInfo{g.QuadraticDrawer.program}, color.RGBA{0, 0, 0, 1}} g.configs = append(g.configs, g.GlColorConfig) g.GlColorConfig.SetColor(Black) gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) gl.Enable(gl.BLEND) gl.Enable(gl.STENCIL_TEST) return g }
func (v *Video) Init(w int, h int) { var err error if err = glfw.Init(); err != nil { log.Fatal(err) } glfw.OpenWindowHint(glfw.WindowNoResize, gl.TRUE) if err = glfw.OpenWindow(w, h, 8, 8, 8, 0, 24, 0, glfw.Windowed); err != nil { log.Fatal(err) } if gl.Init() != 0 { log.Fatal("ummm... hmmm") } glfw.SetWindowSizeCallback(resize) gl.Enable(gl.TEXTURE_2D) resize(w, h) v.Texture = gl.GenTexture() }
func (m *Map) Draw() { gl.PushMatrix() gl.PushAttrib(gl.CURRENT_BIT | gl.ENABLE_BIT | gl.LIGHTING_BIT | gl.POLYGON_BIT | gl.LINE_BIT) gl.EnableClientState(gl.VERTEX_ARRAY) gl.VertexPointer(3, gl.FLOAT, 0, m.vertices) gl.EnableClientState(gl.NORMAL_ARRAY) gl.NormalPointer(gl.FLOAT, 0, m.normals) // gl.EnableClientState(gl.TEXTURE_COORD_ARRAY) // gl.TexCoordPointer(2, gl.FLOAT, 0, m.texcoords) gl.EnableClientState(gl.COLOR_ARRAY) gl.ColorPointer(3, gl.FLOAT, 0, m.colors) // draw solids gl.Enable(gl.COLOR_MATERIAL) // gl.DrawArrays(gl.TRIANGLE_STRIP, 0, len(m.vertices)/3) gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE) gl.LineWidth(1.0) gl.Color4f(1, 1, 1, 1) gl.DrawArrays(gl.TRIANGLE_STRIP, 0, len(m.vertices)/3) gl.PopAttrib() gl.PopMatrix() }
//Draws all the sprites in the supplied slice func (sheet SpriteSheet) Draw(sprites []*Sprite) { gl.Enable(gl.TEXTURE_2D) sheet.texture.Bind(gl.TEXTURE_2D) for _, sprite := range sprites { gl.Begin(gl.TRIANGLE_STRIP) { gl.TexCoord2f(sprite.left, sprite.bottom) gl.Vertex2f(sprite.X, sprite.Y) gl.TexCoord2f(sprite.left, sprite.top) gl.Vertex2f(sprite.X, sprite.Y+sprite.H) gl.TexCoord2f(sprite.right, sprite.bottom) gl.Vertex2f(sprite.X+sprite.W, sprite.Y) gl.TexCoord2f(sprite.right, sprite.top) gl.Vertex2f(sprite.X+sprite.W, sprite.Y+sprite.H) } gl.End() } sheet.texture.Unbind(gl.TEXTURE_2D) gl.Disable(gl.TEXTURE_2D) }
// Commit creates the actual texture from the atlas image data. // This should be called after all regions have been defined and set, // and before you start using the texture for display. func (a *TextureAtlas) Commit(target gl.GLenum) { gl.PushAttrib(gl.CURRENT_BIT | gl.ENABLE_BIT) gl.Enable(target) a.texture.Bind(target) gl.TexParameteri(target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE) gl.TexParameteri(target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE) gl.TexParameteri(target, gl.TEXTURE_MAG_FILTER, gl.LINEAR) gl.TexParameteri(target, gl.TEXTURE_MIN_FILTER, gl.LINEAR) switch a.depth { case 4: gl.TexImage2D(target, 0, gl.RGBA, a.width, a.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, a.data) case 3: gl.TexImage2D(target, 0, gl.RGB, a.width, a.height, 0, gl.RGB, gl.UNSIGNED_BYTE, a.data) case 1: gl.TexImage2D(target, 0, gl.ALPHA, a.width, a.height, 0, gl.ALPHA, gl.UNSIGNED_BYTE, a.data) } gl.PopAttrib() }