本文整理汇总了Golang中golang.org/x/mobile/gl.Context.BufferSubData方法的典型用法代码示例。如果您正苦于以下问题:Golang Context.BufferSubData方法的具体用法?Golang Context.BufferSubData怎么用?Golang Context.BufferSubData使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类golang.org/x/mobile/gl.Context
的用法示例。
在下文中一共展示了Context.BufferSubData方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Update
func (buf *uintBuffer) Update(ctx gl.Context, data []uint32) {
buf.count = len(data)
subok := len(buf.bin) > 0 && len(data)*4 <= len(buf.bin)
if !subok {
buf.bin = make([]byte, len(data)*4)
}
for i, u := range data {
buf.bin[4*i+0] = byte(u >> 0)
buf.bin[4*i+1] = byte(u >> 8)
buf.bin[4*i+2] = byte(u >> 16)
buf.bin[4*i+3] = byte(u >> 24)
}
if subok {
ctx.BufferSubData(gl.ELEMENT_ARRAY_BUFFER, 0, buf.bin)
} else {
ctx.BufferData(gl.ELEMENT_ARRAY_BUFFER, buf.bin, buf.usage)
}
}
示例2: Paint
func (wf *Waveform) Paint(ctx gl.Context, xps, yps, width, height float32) {
// TODO this is racey and samples can be in the middle of changing
// move the slice copy to Prepare and sync with playback, or feed over chan
// TODO assumes mono
var (
xstep float32 = width / float32(len(wf.samples))
xpos float32 = xps
)
for i, x := range wf.samples {
// clip
if x > 1 {
x = 1
} else if x < -1 {
x = -1
}
wf.verts[i*3] = float32(xpos)
wf.verts[i*3+1] = yps + (height * float32((x+1)/2))
wf.verts[i*3+2] = 0
xpos += xstep
}
for i, x := range wf.verts {
u := math.Float32bits(x)
wf.data[4*i+0] = byte(u >> 0)
wf.data[4*i+1] = byte(u >> 8)
wf.data[4*i+2] = byte(u >> 16)
wf.data[4*i+3] = byte(u >> 24)
}
ctx.UseProgram(wf.program)
ctx.Uniform4f(wf.color, 1, 1, 1, 1)
// update hw buf and draw
ctx.BindBuffer(gl.ARRAY_BUFFER, wf.buf)
ctx.EnableVertexAttribArray(wf.position)
ctx.VertexAttribPointer(wf.position, 3, gl.FLOAT, false, 0, 0)
ctx.BufferSubData(gl.ARRAY_BUFFER, 0, wf.data)
ctx.DrawArrays(gl.LINE_STRIP, 0, len(wf.samples))
ctx.DisableVertexAttribArray(wf.position)
}