func (glRenderer *OpenglRenderer) renderPostEffect(pe postEffect) { gl.UseProgram(pe.program) gl.ActiveTexture(gl.TEXTURE0) gl.BindTexture(gl.TEXTURE_2D, pe.textureId) gl.Disable(gl.CULL_FACE) gl.BindBuffer(gl.ARRAY_BUFFER, glRenderer.postEffectVbo) setupUniforms(pe.shader) vertAttrib := uint32(gl.GetAttribLocation(pe.program, gl.Str("vert\x00"))) gl.EnableVertexAttribArray(vertAttrib) gl.VertexAttribPointer(vertAttrib, 2, gl.FLOAT, false, 4*4, gl.PtrOffset(0)) texCoordAttrib := uint32(gl.GetAttribLocation(pe.program, gl.Str("vertTexCoord\x00"))) gl.EnableVertexAttribArray(texCoordAttrib) gl.VertexAttribPointer(texCoordAttrib, 2, gl.FLOAT, false, 4*4, gl.PtrOffset(2*4)) gl.DrawArrays(gl.TRIANGLE_STRIP, 0, 4) gl.DisableVertexAttribArray(texCoordAttrib) }
func (renderer *Renderer) Loop() { defer glog.Flush() if err := glfw.Init(); err != nil { glog.Fatalln("GLFW failed to initialize:", err) glog.Info("GLFW failed to init") } glfw.WindowHint(glfw.ContextVersionMajor, 3) glfw.WindowHint(glfw.ContextVersionMinor, 2) glfw.WindowHint(glfw.OpenGLForwardCompatible, glfw.True) glfw.WindowHint(glfw.Resizable, glfw.False) window, windowError := glfw.CreateWindow(800, 600, "OpenGL", nil, nil) if windowError != nil { glog.Info("oops") panic(windowError) } glog.Info("Buffer") defer func() { window.Destroy() glfw.Terminate() glog.Info("ending") renderer.ended = true //system_end <- true }() window.MakeContextCurrent() if err := gl.Init(); err != nil { panic(err) } renderer.keyCallback = func(window *glfw.Window, key glfw.Key, scancode int, action glfw.Action, mods glfw.ModifierKey) { glog.Infof("key: %v, scancode: %v, action: %v, mods: %v", key, scancode, action, mods) } window.SetKeyCallback(renderer.keyCallback) //<-system_start renderer.started = true //system_started <- true gl.ClearDepth(1.0) var vboID uint32 gl.GenBuffers(1, &vboID) var vertexData = []float32{ 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, } gl.BindBuffer(gl.ARRAY_BUFFER, vboID) gl.BufferData(gl.ARRAY_BUFFER, len(vertexData)*4, gl.Ptr(vertexData), gl.STATIC_DRAW) gl.BindBuffer(gl.ARRAY_BUFFER, 0) //get shaders vertexShader, fragmentShader := getShaders() program, err := newProgram(vertexShader, fragmentShader) program.UseProgram() if err != nil { panic(err) } //bind attributes // L: for !window.ShouldClose() { //renderer.drawGame(program) gl.EnableVertexAttribArray(0) gl.BindBuffer(gl.ARRAY_BUFFER, vboID) gl.VertexAttribPointer( 0, 3, gl.FLOAT, false, 0, gl.PtrOffset(0)) gl.DrawArrays(gl.TRIANGLES, 0, 3) gl.DisableVertexAttribArray(0) window.SwapBuffers() glfw.PollEvents() } if vboID != 0 { gl.DeleteBuffers(1, &vboID) } }
func (program *GLSLProgram) UnUse() { gl.UseProgram(0) for i := uint32(0); i < program.numAttributes; i++ { gl.DisableVertexAttribArray(i) } }
func (v *VBO) Unbind() { gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, 0) gl.DisableVertexAttribArray(gPosition_attr) gl.DisableVertexAttribArray(gUVs_attr) gl.BindVertexArray(0) }