func NewRenderer(bufferSize int) (r *Renderer, err error) { var ( instance renderInstance instanceStride = unsafe.Sizeof(instance) ) r = &Renderer{ shader: core.NewProgram(), bufferSize: bufferSize, buffer: make([]renderInstance, bufferSize), stride: instanceStride, } if err = r.shader.Load(VERTEX, FRAGMENT); err != nil { return } r.shader.Bind() r.vbo = core.NewArrayBuffer() r.shader.Attrib("f_InstanceFrame", instanceStride).Float(unsafe.Offsetof(instance.frame), 1) r.shader.Attrib("m_Model", instanceStride).Mat4(unsafe.Offsetof(instance.model), 1) r.shader.Attrib("v_Color", instanceStride).Vec4(unsafe.Offsetof(instance.color), 1) r.textureData = r.shader.UniformBlock("TextureData", 1) r.uView = r.shader.Uniform("m_View") r.uProj = r.shader.Uniform("m_Projection") if e := gl.GetError(); e != 0 { err = fmt.Errorf("ERROR: OpenGL error %X", e) } return }
func NewFramerateRenderer() (r *Framerate, err error) { r = &Framerate{ shader: core.NewProgram(), data: newFramerateData(120), } if err = r.shader.Load(FRAMERATE_VERTEX, FRAMERATE_FRAGMENT); err != nil { return } r.shader.Bind() gl.GenBuffers(1, &r.vbo) gl.BindBuffer(gl.ARRAY_BUFFER, r.vbo) var ( point framerateDataPoint locPosition = uint32(gl.GetAttribLocation(r.shader.ID(), gl.Str("v_Position\x00"))) offPosition = gl.PtrOffset(int(unsafe.Offsetof(point.pos))) ) r.stride = int32(unsafe.Sizeof(point)) r.locColor = gl.GetUniformLocation(r.shader.ID(), gl.Str("v_Color\x00")) r.locModelView = gl.GetUniformLocation(r.shader.ID(), gl.Str("m_ModelView\x00")) r.locProjection = gl.GetUniformLocation(r.shader.ID(), gl.Str("m_Projection\x00")) gl.EnableVertexAttribArray(locPosition) gl.VertexAttribPointer(locPosition, 2, gl.FLOAT, false, r.stride, offPosition) return }