本文整理汇总了Golang中golang.org/x/mobile/gl.UseProgram函数的典型用法代码示例。如果您正苦于以下问题:Golang UseProgram函数的具体用法?Golang UseProgram怎么用?Golang UseProgram使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了UseProgram函数的17个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: onPaint
func onPaint(sz size.Event) {
gl.ClearColor(rgb(156), rgb(39), rgb(176), 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
var rotationMatrix = []float32{
f32.Cos(-alpha), -f32.Sin(-alpha), 0.0,
f32.Sin(-alpha), f32.Cos(-alpha), 0.0,
0.0, 0.0, 1.0,
}
gl.UseProgram(program)
// setting color
gl.Uniform4f(color, rgb(255), rgb(255), rgb(255), 1)
gl.UniformMatrix3fv(matrixId, rotationMatrix)
gl.Uniform1f(resolutionId, resIndex)
gl.BindBuffer(gl.ARRAY_BUFFER, swasBuffer)
gl.EnableVertexAttribArray(position)
gl.VertexAttribPointer(position, 3, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.LINES, 0, 16)
gl.DisableVertexAttribArray(position)
gl.UseProgram(texProgram)
// setting color
gl.Uniform4f(color2, rgb(130), rgb(50), rgb(80), 1)
gl.Uniform1f(resolutionId2, resIndex)
gl.UniformMatrix3fv(matrixId2, rotationMatrix)
gl.BindBuffer(gl.ARRAY_BUFFER, quadBuffer)
gl.EnableVertexAttribArray(position2)
gl.VertexAttribPointer(position2, 3, gl.FLOAT, false, 0, 0)
gl.BindBuffer(gl.ARRAY_BUFFER, quadTexBuffer)
gl.EnableVertexAttribArray(textureCoords)
gl.VertexAttribPointer(textureCoords, 2, gl.FLOAT, false, 0, 0)
gl.Uniform1i(gl.GetUniformLocation(texProgram, "myTexture"), 0)
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, textureId)
gl.DrawArrays(gl.TRIANGLES, 0, 6)
gl.DisableVertexAttribArray(position2)
gl.DisableVertexAttribArray(textureCoords)
if spin == true {
alpha += 0.1
}
if alpha >= 360 {
alpha = 0.0
}
}
开发者ID:gitter-badger,项目名称:bukkake,代码行数:54,代码来源:main.go
示例2: draw
func draw() {
if program.Value == 0 {
initGL()
initCL()
}
if numPlatforms == 0 {
gl.ClearColor(1, 0, 0, 1)
} else {
gl.ClearColor(0, 1, 0, 1)
}
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.UseProgram(program)
blue += 0.01
if blue > 1 {
blue = 0
}
gl.Uniform4f(color, 0, 0, blue, 1)
gl.Uniform2f(offset, float32(touchLoc.X/geom.Width), float32(touchLoc.Y/geom.Height))
gl.BindBuffer(gl.ARRAY_BUFFER, buf)
gl.EnableVertexAttribArray(position)
gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.TRIANGLES, 0, vertexCount)
gl.DisableVertexAttribArray(position)
debug.DrawFPS()
}
开发者ID:xfong,项目名称:gocl,代码行数:30,代码来源:main.go
示例3: drawFrame
func (video *Video) drawFrame() {
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
gl.UseProgram(video.prog)
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, video.texture)
log.Print("Reading")
frame := <-video.pixelBuffer
buf := make([]float32, len(frame))
log.Print("Read frame")
for k, v := range frame {
buf[k] = float32(v)
}
log.Print("Writing")
if video.pixelBuffer != nil {
gl.TexImage2D(gl.TEXTURE_2D, 0, 256, 256, gl.RGBA,
gl.UNSIGNED_SHORT_4_4_4_4, f32.Bytes(binary.LittleEndian, buf...))
}
log.Print("Wrote")
gl.DrawArrays(gl.TRIANGLES, 0, 6)
video.fpsmanager.FramerateDelay()
}
开发者ID:BluePadge,项目名称:Fergulator-Android,代码行数:25,代码来源:video.go
示例4: onPaint
func onPaint(c size.Event) {
//清场
gl.ClearColor(1, 1, 1, 1) //设置背景颜色
gl.Clear(gl.COLOR_BUFFER_BIT)
//使用program
gl.UseProgram(program)
gl.Uniform4f(color, 0, 0.5, 0.8, 1) //设置color对象值,设置4个浮点数.
//offset有两个值X,Y,窗口左上角为(0,0),右下角为(1,1)
//gl.Uniform4f(offset,5.0,1.0,1.0,1.0 )
//gl.Uniform2f(offset,offsetx,offsety )//为2参数的uniform变量赋值
//log.Println("offset:",offsetx,offsety, 0, 0)
gl.UniformMatrix4fv(scan, []float32{
float32(touchLoc.X/c.WidthPt*4 - 2), 0, 0, 0,
0, float32(touchLoc.Y/c.HeightPt*4 - 2), 0, 0,
0, 0, 0, 0,
0, 0, 0, 1,
})
gl.BindBuffer(gl.ARRAY_BUFFER, buf)
gl.EnableVertexAttribArray(position)
/*glVertexAttribPointer 指定了渲染时索引值为 index 的顶点属性数组的数据格式和位置。调用gl.vertexAttribPointer()方法,把顶点着色器中某个属性相对应的通用属性索引连接到绑定的webGLBUffer对象上。
index 指定要修改的顶点属性的索引值
size 指定每个顶点属性的组件数量。必须为1、2、3或者4。初始值为4。(如position是由3个(x,y,z)组成,而颜色是4个(r,g,b,a))
type 指定数组中每个组件的数据类型。可用的符号常量有GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT,GL_UNSIGNED_SHORT, GL_FIXED, 和 GL_FLOAT,初始值为GL_FLOAT。
normalized 指定当被访问时,固定点数据值是否应该被归一化(GL_TRUE)或者直接转换为固定点值(GL_FALSE)。
stride 指定连续顶点属性之间的偏移量。如果为0,那么顶点属性会被理解为:它们是紧密排列在一起的。初始值为0。
pointer 指定第一个组件在数组的第一个顶点属性中的偏移量。该数组与GL_ARRAY_BUFFER绑定,储存于缓冲区中。初始值为0;
*/
gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0) //更新position值
gl.DrawArrays(gl.TRIANGLES, 0, vertexCount)
gl.DisableVertexAttribArray(position)
debug.DrawFPS(c)
}
开发者ID:lovexiaov,项目名称:gomobileapp,代码行数:35,代码来源:main.go
示例5: onPaint
func onPaint(c size.Event) {
gl.ClearColor(0, 0.3, 0.3, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.UseProgram(program)
green += direction
if green > 1 {
green = 1
direction = -direction
}
if green < 0.4 {
green = 0.4
direction = -direction
}
gl.Uniform4f(color, 0, green, 0, 1)
gl.Uniform2f(offset, touchX/float32(c.WidthPx), touchY/float32(c.HeightPx))
gl.BindBuffer(gl.ARRAY_BUFFER, buf)
gl.BufferData(gl.ARRAY_BUFFER, triangleData, gl.STATIC_DRAW) // ?
gl.EnableVertexAttribArray(position)
gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.TRIANGLES, 0, vertexCount)
gl.DisableVertexAttribArray(position)
debug.DrawFPS(c)
}
开发者ID:plumbum,项目名称:go-samples,代码行数:30,代码来源:main.go
示例6: Draw
func (w *windowImpl) Draw(src2dst f64.Aff3, src screen.Texture, sr image.Rectangle, op draw.Op, opts *screen.DrawOptions) {
t := src.(*textureImpl)
a := w.vertexAff3(sr)
gl.UseProgram(w.s.texture.program)
writeAff3(w.s.texture.mvp, mul(a, src2dst))
// OpenGL's fragment shaders' UV coordinates run from (0,0)-(1,1),
// unlike vertex shaders' XY coordinates running from (-1,+1)-(+1,-1).
//
// We are drawing a rectangle PQRS, defined by two of its
// corners, onto the entire texture. The two quads may actually
// be equal, but in the general case, PQRS can be smaller.
//
// (0,0) +---------------+ (1,0)
// | P +-----+ Q |
// | | | |
// | S +-----+ R |
// (0,1) +---------------+ (1,1)
//
// The PQRS quad is always axis-aligned. First of all, convert
// from pixel space to texture space.
tw := float64(t.size.X)
th := float64(t.size.Y)
px := float64(sr.Min.X-0) / tw
py := float64(sr.Min.Y-0) / th
qx := float64(sr.Max.X-0) / tw
sy := float64(sr.Max.Y-0) / th
// Due to axis alignment, qy = py and sx = px.
//
// The simultaneous equations are:
// 0 + 0 + a02 = px
// 0 + 0 + a12 = py
// a00 + 0 + a02 = qx
// a10 + 0 + a12 = qy = py
// 0 + a01 + a02 = sx = px
// 0 + a11 + a12 = sy
writeAff3(w.s.texture.uvp, f64.Aff3{
qx - px, 0, px,
0, sy - py, py,
})
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, t.id)
gl.Uniform1i(w.s.texture.sample, 0)
gl.BindBuffer(gl.ARRAY_BUFFER, w.s.texture.quadXY)
gl.EnableVertexAttribArray(w.s.texture.pos)
gl.VertexAttribPointer(w.s.texture.pos, 2, gl.FLOAT, false, 0, 0)
gl.BindBuffer(gl.ARRAY_BUFFER, w.s.texture.quadUV)
gl.EnableVertexAttribArray(w.s.texture.inUV)
gl.VertexAttribPointer(w.s.texture.inUV, 2, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.TRIANGLE_STRIP, 0, 4)
gl.DisableVertexAttribArray(w.s.texture.pos)
gl.DisableVertexAttribArray(w.s.texture.inUV)
}
开发者ID:kleopatra999,项目名称:exp,代码行数:59,代码来源:window.go
示例7: Draw
func (e *Engine) Draw(c size.Event) {
gl.Enable(gl.DEPTH_TEST)
gl.DepthFunc(gl.LESS)
gl.ClearColor(0.5, 0.8, 0.8, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.Clear(gl.DEPTH_BUFFER_BIT)
gl.UseProgram(e.shader.program)
gl.Uniform3fv(e.shader.lightdir, []float32{0.5, 0.6, 0.7})
m := mgl32.Perspective(1.3, float32(c.WidthPt/c.HeightPt), 0.1, 10.0)
gl.UniformMatrix4fv(e.shader.projectionmatrix, m[:])
eye := mgl32.Vec3{0, 0, 0.2}
center := mgl32.Vec3{0, 0, 0}
up := mgl32.Vec3{0, 1, 0}
m = mgl32.LookAtV(eye, center, up)
gl.UniformMatrix4fv(e.shader.viewmatrix, m[:])
m = mgl32.HomogRotate3D((e.touchx/float32(c.WidthPt)-0.5)*6.28, mgl32.Vec3{0, 1, 0})
gl.UniformMatrix4fv(e.shader.modelmatrix, m[:])
m = mgl32.HomogRotate3D((e.touchx/float32(c.WidthPt)-0.5)*6.28, mgl32.Vec3{0, -1, 0})
gl.UniformMatrix4fv(e.shader.lightmatrix, m[:])
coordsPerVertex := 3
for _, obj := range e.shape.Objs {
gl.BindBuffer(gl.ARRAY_BUFFER, obj.coord)
gl.EnableVertexAttribArray(e.shader.vertCoord)
gl.VertexAttribPointer(e.shader.vertCoord, coordsPerVertex, gl.FLOAT, false, 12, 0)
texCoordsPerVertex := 2
gl.BindBuffer(gl.ARRAY_BUFFER, obj.uvcoord)
gl.EnableVertexAttribArray(e.shader.texcoord)
gl.VertexAttribPointer(e.shader.texcoord, texCoordsPerVertex, gl.FLOAT, false, 8, 0)
gl.BindBuffer(gl.ARRAY_BUFFER, obj.normal)
gl.EnableVertexAttribArray(e.shader.normal)
gl.VertexAttribPointer(e.shader.normal, 3, gl.FLOAT, false, 12, 0)
gl.BindTexture(gl.TEXTURE_2D, obj.tex)
gl.DrawArrays(gl.TRIANGLES, 0, obj.vcount)
gl.DisableVertexAttribArray(e.shader.texcoord)
gl.DisableVertexAttribArray(e.shader.normal)
gl.DisableVertexAttribArray(e.shader.vertCoord)
}
debug.DrawFPS(c)
}
开发者ID:lovexiaov,项目名称:gomobileapp,代码行数:55,代码来源:main.go
示例8: Draw
func (e *Engine) Draw(c size.Event) {
gl.Enable(gl.DEPTH_TEST)
gl.DepthFunc(gl.LESS)
gl.ClearColor(0.2, 0.2, 0.2, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.Clear(gl.DEPTH_BUFFER_BIT)
gl.UseProgram(e.shader.program)
m := mgl32.Perspective(0.785, float32(c.WidthPt/c.HeightPt), 0.1, 10.0)
gl.UniformMatrix4fv(e.shader.projection, m[:])
eye := mgl32.Vec3{0, 0, 8}
center := mgl32.Vec3{0, 0, 0}
up := mgl32.Vec3{0, 1, 0}
m = mgl32.LookAtV(eye, center, up)
gl.UniformMatrix4fv(e.shader.view, m[:])
m = mgl32.HomogRotate3D(float32(e.touchLoc.X/c.WidthPt-0.5)*3.14*2, mgl32.Vec3{0, 1, 0})
gl.UniformMatrix4fv(e.shader.modelx, m[:])
m = mgl32.HomogRotate3D(float32(e.touchLoc.Y/c.HeightPt-0.5)*3.14, mgl32.Vec3{1, 0, 0})
gl.UniformMatrix4fv(e.shader.modely, m[:])
coordsPerVertex := 3
for _, obj := range e.shape.Objs {
gl.BindBuffer(gl.ARRAY_BUFFER, obj.coord)
gl.EnableVertexAttribArray(e.shader.vertCoord)
gl.VertexAttribPointer(e.shader.vertCoord, coordsPerVertex, gl.FLOAT, false, 12, 0)
if obj.useuv == true {
gl.Uniform1i(e.shader.useuv, 1)
texCoordsPerVertex := 2
gl.BindBuffer(gl.ARRAY_BUFFER, obj.uvcoord)
gl.EnableVertexAttribArray(e.shader.vertTexCoord)
gl.VertexAttribPointer(e.shader.vertTexCoord, texCoordsPerVertex, gl.FLOAT, false, 8, 0)
gl.BindTexture(gl.TEXTURE_2D, obj.tex)
} else {
gl.Uniform1i(e.shader.useuv, 0)
gl.Uniform4f(e.shader.color, obj.color[0], obj.color[1], obj.color[2], obj.color[3])
}
gl.DrawArrays(gl.TRIANGLES, 0, obj.vcount)
if obj.useuv {
gl.DisableVertexAttribArray(e.shader.vertTexCoord)
}
gl.DisableVertexAttribArray(e.shader.vertCoord)
}
debug.DrawFPS(c)
}
开发者ID:lomoalbert,项目名称:gomobileapp,代码行数:55,代码来源:main.go
示例9: initGL
func (video *Video) initGL() {
log.Print("Initing")
video.fpsmanager = gfx.NewFramerate()
video.fpsmanager.SetFramerate(60)
gl.ClearColor(0.0, 0.0, 0.0, 1.0)
gl.Enable(gl.CULL_FACE)
gl.Enable(gl.DEPTH_TEST)
log.Print("Creating program")
video.prog = createProgram(vertShaderSrcDef, fragShaderSrcDef)
log.Print("Attrib loc 1")
posAttrib := attribLocation(video.prog, "vPosition")
log.Print("Attrib loc 2")
texCoordAttr := attribLocation(video.prog, "vTexCoord")
log.Print("Uniform loc 1")
paletteLoc := uniformLocation(video.prog, "palette")
log.Print("Uniform loc 2")
video.textureUni = uniformLocation(video.prog, "texture")
log.Print("Gen Texture")
video.texture = genTexture()
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, video.texture)
log.Print("TexParam")
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
gl.UseProgram(video.prog)
gl.EnableVertexAttribArray(posAttrib)
gl.EnableVertexAttribArray(texCoordAttr)
gl.Uniform3iv(paletteLoc, nes.SPaletteRgb)
log.Print("VertBO")
vertVBO := genBuffer()
checkGLError()
gl.BindBuffer(gl.ARRAY_BUFFER, vertVBO)
verts := f32.Bytes(binary.LittleEndian, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0)
gl.BufferData(gl.ARRAY_BUFFER, verts, gl.STATIC_DRAW)
textCoorBuf := genBuffer()
checkGLError()
gl.BindBuffer(gl.ARRAY_BUFFER, textCoorBuf)
texVerts := f32.Bytes(binary.LittleEndian, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0)
gl.BufferData(gl.ARRAY_BUFFER, texVerts, gl.STATIC_DRAW)
gl.VertexAttribPointer(posAttrib, 2, gl.FLOAT, false, 0, 0)
gl.VertexAttribPointer(texCoordAttr, 2, gl.FLOAT, false, 0, 0)
log.Print("Started")
}
开发者ID:BluePadge,项目名称:Fergulator-Android,代码行数:52,代码来源:video.go
示例10: Draw
func (e *Engine) Draw(c event.Config) {
since := time.Now().Sub(e.started)
gl.Enable(gl.DEPTH_TEST)
gl.DepthFunc(gl.LESS)
gl.ClearColor(0, 0, 0, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.Clear(gl.DEPTH_BUFFER_BIT)
gl.UseProgram(e.shader.program)
// Setup MVP
var m mgl.Mat4
m = mgl.Perspective(0.785, float32(c.Width/c.Height), 0.1, 10.0)
gl.UniformMatrix4fv(e.shader.projection, m[:])
m = mgl.LookAtV(
mgl.Vec3{3, 3, 3}, // eye
mgl.Vec3{0, 0, 0}, // center
mgl.Vec3{0, 1, 0}, // up
)
gl.UniformMatrix4fv(e.shader.view, m[:])
m = mgl.HomogRotate3D(float32(since.Seconds()), mgl.Vec3{0, 1, 0})
gl.UniformMatrix4fv(e.shader.model, m[:])
// Draw our shape
gl.BindBuffer(gl.ARRAY_BUFFER, e.shape.buf)
gl.EnableVertexAttribArray(e.shader.vertCoord)
gl.VertexAttribPointer(e.shader.vertCoord, e.shape.coordsPerVertex, gl.FLOAT, false, 20, 0) // 4 bytes in float, 5 values per vertex
gl.EnableVertexAttribArray(e.shader.vertTexCoord)
gl.VertexAttribPointer(e.shader.vertTexCoord, e.shape.texCoordsPerVertex, gl.FLOAT, false, 20, 12)
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, e.shape.texture)
gl.DrawArrays(gl.TRIANGLES, 0, e.shape.vertexCount)
gl.DisableVertexAttribArray(e.shader.vertCoord)
//debug.DrawFPS(c)
}
开发者ID:shazow,项目名称:gomobile-examples,代码行数:45,代码来源:main.go
示例11: onPaint
func onPaint(c config.Event) {
gl.ClearColor(1, 1, 1, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.UseProgram(program)
gl.Uniform4f(color, 0.3, 0.3, 0.3, 1) // color
// position
x := float32(touchLoc.X / c.Width)
y := float32(touchLoc.Y / c.Height)
gl.Uniform2f(offset, x, y)
gl.BindBuffer(gl.ARRAY_BUFFER, buf)
gl.EnableVertexAttribArray(position)
gl.VertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.TRIANGLE_STRIP, 0, 4)
gl.DisableVertexAttribArray(position)
}
开发者ID:natasharomanoff,项目名称:blinker,代码行数:18,代码来源:main.go
示例12: onDraw
func onDraw(c config.Event) {
gl.ClearColor(1, 0, 0, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.UseProgram(program)
green += 0.01
if green > 1 {
green = 0
}
gl.Uniform4f(color, 0, green, 0, 1)
gl.Uniform2f(offset, float32(touchLoc.X/c.Width), float32(touchLoc.Y/c.Height))
gl.BindBuffer(gl.ARRAY_BUFFER, buf)
gl.EnableVertexAttribArray(position)
gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.TRIANGLES, 0, vertexCount)
gl.DisableVertexAttribArray(position)
debug.DrawFPS(c)
}
开发者ID:SpruceHealth,项目名称:mobile,代码行数:22,代码来源:main.go
示例13: onPaint
func onPaint(sz size.Event) {
gl.ClearColor(1, 0, 0, 1)
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.UseProgram(program)
green += 0.01
if green > 1 {
green = 0
}
gl.Uniform4f(color, 0, green, 0, 1)
gl.Uniform2f(offset, touchX/float32(sz.WidthPx), touchY/float32(sz.HeightPx))
gl.BindBuffer(gl.ARRAY_BUFFER, buf)
gl.EnableVertexAttribArray(position)
gl.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.TRIANGLES, 0, vertexCount)
gl.DisableVertexAttribArray(position)
debug.DrawFPS(sz)
}
开发者ID:paulhankin,项目名称:mobile,代码行数:22,代码来源:main.go
示例14: Fill
func (w *windowImpl) Fill(dr image.Rectangle, src color.Color, op draw.Op) {
if !gl.IsProgram(w.s.fill.program) {
p, err := compileProgram(fillVertexSrc, fillFragmentSrc)
if err != nil {
// TODO: initialize this somewhere else we can better handle the error.
panic(err.Error())
}
w.s.fill.program = p
w.s.fill.pos = gl.GetAttribLocation(p, "pos")
w.s.fill.mvp = gl.GetUniformLocation(p, "mvp")
w.s.fill.color = gl.GetUniformLocation(p, "color")
w.s.fill.quadXY = gl.CreateBuffer()
gl.BindBuffer(gl.ARRAY_BUFFER, w.s.fill.quadXY)
gl.BufferData(gl.ARRAY_BUFFER, quadXYCoords, gl.STATIC_DRAW)
}
gl.UseProgram(w.s.fill.program)
writeAff3(w.s.fill.mvp, w.vertexAff3(dr))
r, g, b, a := src.RGBA()
gl.Uniform4f(
w.s.fill.color,
float32(r)/65535,
float32(g)/65535,
float32(b)/65535,
float32(a)/65535,
)
gl.BindBuffer(gl.ARRAY_BUFFER, w.s.fill.quadXY)
gl.EnableVertexAttribArray(w.s.fill.pos)
gl.VertexAttribPointer(w.s.fill.pos, 2, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.TRIANGLE_STRIP, 0, 4)
gl.DisableVertexAttribArray(w.s.fill.pos)
}
开发者ID:kleopatra999,项目名称:exp,代码行数:37,代码来源:window.go
示例15: Draw
// Draw draws the srcBounds part of the image onto a parallelogram, defined by
// three of its corners, in the current GL framebuffer.
func (img *Image) Draw(topLeft, topRight, bottomLeft geom.Point, srcBounds image.Rectangle) {
// TODO(crawshaw): Adjust viewport for the top bar on android?
gl.UseProgram(glimage.program)
{
// We are drawing a parallelogram PQRS, defined by three of its
// corners, onto the entire GL framebuffer ABCD. The two quads may
// actually be equal, but in the general case, PQRS can be smaller,
// and PQRS is not necessarily axis-aligned.
//
// A +---------------+ B
// | P +-----+ Q |
// | | | |
// | S +-----+ R |
// D +---------------+ C
//
// There are two co-ordinate spaces: geom space and framebuffer space.
// In geom space, the ABCD rectangle is:
//
// (0, 0) (geom.Width, 0)
// (0, geom.Height) (geom.Width, geom.Height)
//
// and the PQRS quad is:
//
// (topLeft.X, topLeft.Y) (topRight.X, topRight.Y)
// (bottomLeft.X, bottomLeft.Y) (implicit, implicit)
//
// In framebuffer space, the ABCD rectangle is:
//
// (-1, +1) (+1, +1)
// (-1, -1) (+1, -1)
//
// First of all, convert from geom space to framebuffer space. For
// later convenience, we divide everything by 2 here: px2 is half of
// the P.X co-ordinate (in framebuffer space).
px2 := -0.5 + float32(topLeft.X/geom.Width)
py2 := +0.5 - float32(topLeft.Y/geom.Height)
qx2 := -0.5 + float32(topRight.X/geom.Width)
qy2 := +0.5 - float32(topRight.Y/geom.Height)
sx2 := -0.5 + float32(bottomLeft.X/geom.Width)
sy2 := +0.5 - float32(bottomLeft.Y/geom.Height)
// Next, solve for the affine transformation matrix
// [ a00 a01 a02 ]
// a = [ a10 a11 a12 ]
// [ 0 0 1 ]
// that maps A to P:
// a × [ -1 +1 1 ]' = [ 2*px2 2*py2 1 ]'
// and likewise maps B to Q and D to S. Solving those three constraints
// implies that C maps to R, since affine transformations keep parallel
// lines parallel. This gives 6 equations in 6 unknowns:
// -a00 + a01 + a02 = 2*px2
// -a10 + a11 + a12 = 2*py2
// +a00 + a01 + a02 = 2*qx2
// +a10 + a11 + a12 = 2*qy2
// -a00 - a01 + a02 = 2*sx2
// -a10 - a11 + a12 = 2*sy2
// which gives:
// a00 = (2*qx2 - 2*px2) / 2 = qx2 - px2
// and similarly for the other elements of a.
glimage.mvp.WriteAffine(&f32.Affine{{
qx2 - px2,
px2 - sx2,
qx2 + sx2,
}, {
qy2 - py2,
py2 - sy2,
qy2 + sy2,
}})
}
{
// Mapping texture co-ordinates is similar, except that in texture
// space, the ABCD rectangle is:
//
// (0,0) (1,0)
// (0,1) (1,1)
//
// and the PQRS quad is always axis-aligned. First of all, convert
// from pixel space to texture space.
w := float32(img.texWidth)
h := float32(img.texHeight)
px := float32(srcBounds.Min.X-img.Rect.Min.X) / w
py := float32(srcBounds.Min.Y-img.Rect.Min.Y) / h
qx := float32(srcBounds.Max.X-img.Rect.Min.X) / w
sy := float32(srcBounds.Max.Y-img.Rect.Min.Y) / h
// Due to axis alignment, qy = py and sx = px.
//
// The simultaneous equations are:
// 0 + 0 + a02 = px
// 0 + 0 + a12 = py
// a00 + 0 + a02 = qx
// a10 + 0 + a12 = qy = py
// 0 + a01 + a02 = sx = px
// 0 + a11 + a12 = sy
glimage.uvp.WriteAffine(&f32.Affine{{
qx - px,
0,
px,
//.........这里部分代码省略.........
开发者ID:Miaque,项目名称:mojo,代码行数:101,代码来源:glimage.go
示例16: Use
func (shader *shader) Use() {
gl.UseProgram(shader.program)
}
开发者ID:shazow,项目名称:linerage3d,代码行数:3,代码来源:shader.go
示例17: drawKeys
func drawKeys() {
gl.UseProgram(program)
projection.WriteMat4(&projmat)
iPlaying := []int{}
playing := []ratio{}
amps := []float64{}
for i, k := range keys {
k := k.base()
if k.voice != nil && !k.voice.Done() {
iPlaying = append(iPlaying, i)
playing = append(playing, k.ratio)
amps = append(amps, k.voice.amp())
}
}
complexities := make([]float64, len(keys))
minComplexity := math.MaxFloat64
for i, k := range keys {
k := k.base()
c := -1.0
for j, iPlaying := range iPlaying {
if i == iPlaying {
a := amps[j]
amps[j] = 1
c = complexity(playing, amps)
amps[j] = a
break
}
}
if c == -1 {
c = complexity(append(playing, k.ratio), append(amps, 1))
}
complexities[i] = c
if c < minComplexity {
minComplexity = c
}
}
data := []float32{}
pointsizedata := []float32{}
for i, k := range keys {
k := k.base()
k.y = 1 - math.Exp2(-float64(complexities[i]-minComplexity)/4)
k.size = math.Exp2(-float64(complexities[i])/4) * float64(geom.Width) * float64(geom.PixelsPerPt) / 4
data = append(data, float32(k.pitch), float32(k.y))
pointsizedata = append(pointsizedata, float32(k.size))
}
gl.BindBuffer(gl.ARRAY_BUFFER, positionbuf)
gl.BufferData(gl.ARRAY_BUFFER, f32.Bytes(binary.LittleEndian, data...), gl.DYNAMIC_DRAW)
gl.BindBuffer(gl.ARRAY_BUFFER, pointsizebuf)
gl.BufferData(gl.ARRAY_BUFFER, f32.Bytes(binary.LittleEndian, pointsizedata...), gl.DYNAMIC_DRAW)
gl.EnableVertexAttribArray(position)
gl.EnableVertexAttribArray(pointsize)
gl.Uniform4f(color, 1, 1, 1, 1)
gl.BindBuffer(gl.ARRAY_BUFFER, positionbuf)
gl.VertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0)
gl.BindBuffer(gl.ARRAY_BUFFER, pointsizebuf)
gl.VertexAttribPointer(pointsize, 1, gl.FLOAT, false, 0, 0)
gl.DrawArrays(gl.POINTS, 0, len(keys))
gl.DisableVertexAttribArray(position)
gl.DisableVertexAttribArray(pointsize)
}
开发者ID:gordonklaus,项目名称:justkeys,代码行数:62,代码来源:key.go
注:本文中的golang.org/x/mobile/gl.UseProgram函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论