// NewBasicHighlighter returns a new instance of BasicHighlighter. func NewBasicHighlighter(gl opengl.OpenGl, color [4]float32) *BasicHighlighter { vertexShader, err1 := opengl.CompileNewShader(gl, opengl.VERTEX_SHADER, basicHighlighterVertexShaderSource) defer gl.DeleteShader(vertexShader) fragmentShader, err2 := opengl.CompileNewShader(gl, opengl.FRAGMENT_SHADER, basicHighlighterFragmentShaderSource) defer gl.DeleteShader(fragmentShader) program, _ := opengl.LinkNewProgram(gl, vertexShader, fragmentShader) if err1 != nil { fmt.Fprintf(os.Stderr, "Failed to compile shader 1:\n", err1) } if err2 != nil { fmt.Fprintf(os.Stderr, "Failed to compile shader 2:\n", err2) } highlighter := &BasicHighlighter{ gl: gl, program: program, vertexArrayObject: gl.GenVertexArrays(1)[0], vertexPositionBuffer: gl.GenBuffers(1)[0], vertexPositionAttrib: gl.GetAttribLocation(program, "vertexPosition"), modelMatrixUniform: gl.GetUniformLocation(program, "modelMatrix"), viewMatrixUniform: gl.GetUniformLocation(program, "viewMatrix"), projectionMatrixUniform: gl.GetUniformLocation(program, "projectionMatrix"), inColorUniform: gl.GetUniformLocation(program, "inColor")} highlighter.withShader(func() { gl.BindBuffer(opengl.ARRAY_BUFFER, highlighter.vertexPositionBuffer) half := float32(0.5) var vertices = []float32{ -half, -half, 0.0, half, -half, 0.0, half, half, 0.0, half, half, 0.0, -half, half, 0.0, -half, -half, 0.0} gl.BufferData(opengl.ARRAY_BUFFER, len(vertices)*4, vertices, opengl.STATIC_DRAW) gl.Uniform4fv(highlighter.inColorUniform, &color) }) return highlighter }