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 } }
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() }
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) }
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) }
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) }
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) }
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, 5} 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*10/c.WidthPt), mgl32.Vec3{0, 1, 0}) gl.UniformMatrix4fv(e.shader.modelx, m[:]) m = mgl32.HomogRotate3D(float32(e.touchLoc.Y*10/c.HeightPt), mgl32.Vec3{1, 0, 0}) gl.UniformMatrix4fv(e.shader.modely, m[:]) coordsPerVertex := 3 for _, buf := range e.shape.bufs { gl.BindBuffer(gl.ARRAY_BUFFER, buf.coord) gl.EnableVertexAttribArray(e.shader.vertCoord) gl.VertexAttribPointer(e.shader.vertCoord, coordsPerVertex, gl.FLOAT, false, 0, 0) gl.Uniform4f(e.shader.color, buf.color[0], buf.color[1], buf.color[2], buf.color[3]) gl.DrawArrays(gl.TRIANGLES, 0, buf.vcount) gl.DisableVertexAttribArray(e.shader.vertCoord) } debug.DrawFPS(c) }
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) }
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) }
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) }
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) }