func (c *drawImageCommand) Exec(context *opengl.Context, indexOffsetInBytes int) error { f, err := c.dst.createFramebufferIfNeeded(context) if err != nil { return err } if err := f.setAsViewport(context); err != nil { return err } context.BlendFunc(c.mode) n := c.quadsNum() if n == 0 { return nil } _, h := c.dst.Size() proj := f.projectionMatrix(h) p := &programContext{ state: &theOpenGLState, program: theOpenGLState.programTexture, context: context, projectionMatrix: proj, texture: c.src.texture.native, colorM: c.color, } if err := p.begin(); err != nil { return err } // TODO: We should call glBindBuffer here? // The buffer is already bound at begin() but it is counterintuitive. context.DrawElements(opengl.Triangles, 6*n, indexOffsetInBytes) return nil }