本文整理汇总了Golang中github.com/go-gl/gl/v3/3-core/gl.UniformMatrix4fv函数的典型用法代码示例。如果您正苦于以下问题:Golang UniformMatrix4fv函数的具体用法?Golang UniformMatrix4fv怎么用?Golang UniformMatrix4fv使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了UniformMatrix4fv函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Draw
func (t *Text) Draw() {
if t.IsDebug {
t.BoundingBox.Draw()
}
gl.UseProgram(t.font.program)
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, t.font.textureID)
// uniforms
gl.Uniform1i(t.font.fragmentTextureUniform, 0)
gl.Uniform4fv(t.font.colorUniform, 1, &t.color[0])
gl.Uniform2fv(t.font.finalPositionUniform, 1, &t.finalPosition[0])
gl.UniformMatrix4fv(t.font.orthographicMatrixUniform, 1, false, &t.font.OrthographicMatrix[0])
gl.UniformMatrix4fv(t.font.scaleMatrixUniform, 1, false, &t.scaleMatrix[0])
// draw
drawCount := int32(t.RuneCount * 6)
if drawCount > int32(t.eboIndexCount) {
drawCount = int32(t.eboIndexCount)
}
if drawCount < 0 {
drawCount = 0
}
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.BindVertexArray(t.vao)
gl.DrawElements(gl.TRIANGLES, drawCount, gl.UNSIGNED_INT, nil)
gl.BindVertexArray(0)
gl.Disable(gl.BLEND)
}
示例2: Bind
func (tr *TextRenderer) Bind() error {
gl.UseProgram(tr.Program)
if e := gl.GetError(); e != 0 {
return fmt.Errorf("ERROR: %X", e)
}
gl.Uniform1i(tr.TextureUnitLoc, 0)
if e := gl.GetError(); e != 0 {
return fmt.Errorf("ERROR: %X", e)
}
gl.BindBuffer(gl.ARRAY_BUFFER, tr.VBO)
if e := gl.GetError(); e != 0 {
return fmt.Errorf("ERROR: %X", e)
}
gl.EnableVertexAttribArray(tr.PositionLoc)
gl.VertexAttribPointer(tr.PositionLoc, 3, gl.FLOAT, false, 5*4, gl.PtrOffset(0))
if e := gl.GetError(); e != 0 {
return fmt.Errorf("ERROR: %X", e)
}
gl.EnableVertexAttribArray(tr.TextureLoc)
gl.VertexAttribPointer(tr.TextureLoc, 2, gl.FLOAT, false, 5*4, gl.PtrOffset(3*4))
if e := gl.GetError(); e != 0 {
return fmt.Errorf("ERROR: %X", e)
}
gl.UniformMatrix4fv(tr.ProjectionLoc, 1, false, &tr.Renderer.Camera.Projection[0])
if e := gl.GetError(); e != 0 {
return fmt.Errorf("ERROR: %X", e)
}
return nil
}
示例3: Draw
func (lr *LinesRenderer) Draw(line *LineGeometry, mv mgl32.Mat4, style *LineStyle) (err error) {
var (
dataBytes int = len(line.Vertices) * int(lr.stride)
indexBytes int = len(line.Indices) * int(lr.stride)
elementCount int32 = int32(len(line.Indices))
r, g, b, a = style.Color.RGBA()
)
gl.Uniform1f(lr.thicknessLoc, style.Thickness)
gl.Uniform1f(lr.innerLoc, style.Inner)
gl.Uniform4f(lr.colorLoc, float32(r)/255.0, float32(g)/255.0, float32(b)/255.0, float32(a)/255.0)
gl.UniformMatrix4fv(lr.modelviewLoc, 1, false, &mv[0])
if dataBytes > lr.bufferBytes {
lr.bufferBytes = dataBytes
gl.BufferData(gl.ARRAY_BUFFER, dataBytes, gl.Ptr(line.Vertices), gl.STREAM_DRAW)
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, indexBytes, gl.Ptr(line.Indices), gl.STREAM_DRAW)
} else {
gl.BufferSubData(gl.ARRAY_BUFFER, 0, dataBytes, gl.Ptr(line.Vertices))
gl.BufferSubData(gl.ELEMENT_ARRAY_BUFFER, 0, indexBytes, gl.Ptr(line.Indices))
}
gl.DrawElements(gl.TRIANGLES, elementCount, gl.UNSIGNED_INT, gl.PtrOffset(0))
if e := gl.GetError(); e != 0 {
err = fmt.Errorf("ERROR: OpenGL error %X", e)
}
return
}
示例4: render
func (rt *renderableText) render(x, y float32) {
m := newScaleMatrix(rt.width, rt.height, 1)
m = m.mult(newTranslationMatrix(x, y, 0))
gl.UniformMatrix4fv(modelMatrixUniform, 1, false, &m[0])
gl.Uniform1i(textureUniform, int32(rt.texture)-1)
textLineMesh.drawElements()
}
示例5: Bind
func (r *BatchRenderer) Bind() error {
gl.UseProgram(r.Program)
gl.ActiveTexture(gl.TEXTURE0)
gl.Uniform1i(r.TextureUnitLoc, 0)
gl.UniformMatrix4fv(r.ProjectionLoc, 1, false, &r.Camera.Projection[0])
return nil
}
示例6: renderCellBlock
func renderCellBlock(metrics *metrics, c *game.Cell, x, y int) {
bv := float32(0)
if c.Block.State == game.BlockFlashing {
bv = pulse(metrics.g.GlobalPulse+metrics.fudge, 0, 0.5, 1.5)
}
gl.Uniform1f(brightnessUniform, bv)
m := metrics.blockMatrix(c.Block, x, y)
gl.UniformMatrix4fv(modelMatrixUniform, 1, false, &m[0])
blockMeshes[c.Block.Color].drawElements()
}
示例7: Draw
func (b *BoundingBox) Draw() {
gl.UseProgram(b.program)
// uniforms
gl.Uniform2fv(b.finalPositionUniform, 1, &b.finalPosition[0])
gl.UniformMatrix4fv(b.orthographicMatrixUniform, 1, false, &b.font.OrthographicMatrix[0])
// draw
gl.BindVertexArray(b.vao)
gl.DrawElements(gl.TRIANGLES, int32(b.eboIndexCount), gl.UNSIGNED_INT, nil)
gl.BindVertexArray(0)
}
示例8: Draw
func Draw() {
// if len(layers) == 0 {
// fmt.Println("layers empty!!!")
// return
// }
// for _, layer := range layers {
// vertexData := textureHash[layer]
vertexData := &vertexDataTest
// check to see if there are any vertices at all to draw
if len(vertexData.vertexData) == 0 {
return
}
// vertexData.Print()
// vertexData := vertexDataTest
//vertexData.Print()
// BindBuffers(vertexData)
// vertexData.Print()
//gl.BufferSubData(gl.ARRAY_BUFFER, 0, len(vertexData.VertexData)*4, gl.Ptr(vertexData.VertexData))
// gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
gl.BufferData(gl.ARRAY_BUFFER, len(vertexData.vertexData)*4, gl.Ptr(vertexData.vertexData), gl.DYNAMIC_DRAW)
// gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, elementvbo)
// gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, len(vertexData.Elements)*4, gl.Ptr(vertexData.Elements), gl.DYNAMIC_DRAW)
MVP := projectionM.Mul4(viewM) //.Mul4(Model)
gl.UniformMatrix4fv(MVPid, 1, false, &MVP[0])
lightPos := mathgl.Vec3{0, 3, 10}
lightintensities := mathgl.Vec3{1, .4, .2}
gl.Uniform3f(lightpositionID, lightPos[0], lightPos[1], lightPos[2])
gl.Uniform3f(lightintensitiesID, lightintensities[0], lightintensities[1], lightintensities[2])
gl.Uniform3f(cameraPositionID, 0.0, 1.0, -1.0)
// vertexData.Print()
// gl.DrawElements(gl.TRIANGLES, int32(len(vertexData.Elements)), gl.UNSIGNED_INT, nil)
// }
numTriVerts := int32((len(vertexData.vertexData) / (int(NUM_ATTRIBUTES) * 2)) * 3)
gl.DrawArrays(gl.TRIANGLES, 0, numTriVerts)
ClearVertexData()
}
示例9: Render
func (r *Framerate) Render(camera *core.Camera) (err error) {
r.data.Sample()
var (
modelView = mgl32.Ident4()
dataBytes int = int(r.data.Count) * int(r.stride)
)
gl.Uniform4f(r.locColor, 255.0/255.0, 0, 0, 255.0/255.0)
gl.UniformMatrix4fv(r.locModelView, 1, false, &modelView[0])
gl.UniformMatrix4fv(r.locProjection, 1, false, &camera.Projection[0])
if dataBytes > r.vboBytes {
r.vboBytes = dataBytes
gl.BufferData(gl.ARRAY_BUFFER, dataBytes, gl.Ptr(r.data.Points), gl.STREAM_DRAW)
} else {
gl.BufferSubData(gl.ARRAY_BUFFER, 0, dataBytes, gl.Ptr(r.data.Points))
}
gl.DrawArrays(gl.POINTS, 0, r.data.Count)
if e := gl.GetError(); e != 0 {
err = fmt.Errorf("ERROR: OpenGL error %X", e)
}
return
}
示例10: Draw
func (r *BatchRenderer) Draw(batch *Batch, x, y, rot float32) error {
batch.Texture.Bind()
gl.BindBuffer(gl.ARRAY_BUFFER, batch.Buffer)
gl.EnableVertexAttribArray(r.PositionLoc)
gl.VertexAttribPointer(r.PositionLoc, 3, gl.FLOAT, false, 5*4, gl.PtrOffset(0))
gl.EnableVertexAttribArray(r.TextureLoc)
gl.VertexAttribPointer(r.TextureLoc, 2, gl.FLOAT, false, 5*4, gl.PtrOffset(3*4))
m := mgl32.Translate3D(x, y, 0.0).Mul4(mgl32.HomogRotate3DZ(rot))
gl.UniformMatrix4fv(r.ModelViewLoc, 1, false, &m[0])
gl.Uniform2f(r.TexOffsetLoc, batch.textureOffset.X(), batch.textureOffset.Y())
gl.DrawArrays(gl.TRIANGLES, 0, int32(batch.Count))
gl.BindBuffer(gl.ARRAY_BUFFER, 0)
return nil
}
示例11: DrawRectangle
func (c Context) DrawRectangle(x, y, w, h float32, color Color) {
gl.UseProgram(c.program)
model := mgl32.Translate3D(x, y, 0).Mul4(mgl32.Scale3D(w, h, 0))
modelUniform := gl.GetUniformLocation(c.program, gl.Str("model\x00"))
gl.UniformMatrix4fv(modelUniform, 1, false, &model[0])
colorArray := []float32{color.B, color.G, color.R}
colorUniform := gl.GetUniformLocation(c.program, gl.Str("color\x00"))
gl.Uniform4fv(colorUniform, 1, &colorArray[0])
gl.DrawArrays(gl.TRIANGLES, 0, 6)
}
示例12: Bind
func (lr *LinesRenderer) Bind() (err error) {
gl.UseProgram(lr.program)
gl.BindBuffer(gl.ARRAY_BUFFER, lr.buffer)
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, lr.indexBuffer)
gl.EnableVertexAttribArray(lr.positionLoc)
gl.EnableVertexAttribArray(lr.normalLoc)
gl.EnableVertexAttribArray(lr.miterLoc)
gl.VertexAttribPointer(lr.positionLoc, 2, gl.FLOAT, false, lr.stride, lr.offPosition)
gl.VertexAttribPointer(lr.normalLoc, 2, gl.FLOAT, false, lr.stride, lr.offNormal)
gl.VertexAttribPointer(lr.miterLoc, 1, gl.FLOAT, false, lr.stride, lr.offMiter)
gl.UniformMatrix4fv(lr.projectionLoc, 1, false, &lr.Renderer.Camera.Projection[0])
if e := gl.GetError(); e != 0 {
err = fmt.Errorf("ERROR: OpenGL error %X", e)
}
return
}
示例13: renderMarker
func renderMarker(metrics *metrics, m *game.Marker, x, y int) {
switch m.State {
case game.MarkerShowing:
var val string
switch {
case m.ChainLevel > 0:
val = "x" + strconv.Itoa(m.ChainLevel+1)
case m.ComboLevel > 3:
val = strconv.Itoa(m.ComboLevel)
default:
return
}
sc := float32(0.5)
tx := -float32(len(val)-1) * sc
ty := metrics.globalTranslationY + cellTranslationY*-float32(y) + easeOutCubic(m.StateProgress(metrics.fudge), 0, 0.5)
tz := metrics.globalTranslationZ + cellTranslationZ/2 + 0.1
ry := metrics.globalRotationY + metrics.cellRotationY*-float32(x)
yq := newAxisAngleQuaternion(yAxis, ry)
qm := newQuaternionMatrix(yq.normalize())
gl.Uniform1f(brightnessUniform, 0)
gl.Uniform1f(alphaUniform, easeOutCubic(m.StateProgress(metrics.fudge), 1, -1))
for _, rune := range val {
text := markerRuneText[rune]
m := newScaleMatrix(sc, sc, sc)
m = m.mult(newTranslationMatrix(tx, ty, tz))
m = m.mult(qm)
gl.UniformMatrix4fv(modelMatrixUniform, 1, false, &m[0])
gl.Uniform1i(textureUniform, int32(text.texture)-1)
squareMesh.drawElements()
tx++
}
gl.Uniform1i(textureUniform, int32(boardTexture)-1)
}
}
示例14: renderHUD
func renderHUD(g *game.Game, fudge float32) {
gl.UniformMatrix4fv(projectionViewMatrixUniform, 1, false, &orthoProjectionViewMatrix[0])
gl.Uniform1f(grayscaleUniform, 0)
gl.Uniform1f(brightnessUniform, 0)
gl.Uniform1f(alphaUniform, 1)
i := 1
renderText := func(item game.HUDItem, val string) {
text := hudItemText[item]
x := float32(winWidth)/4*float32(i) - text.width/2
y := float32(winHeight) - text.height*2
text.render(x, y)
var valWidth, valHeight float32
for _, rune := range val {
text := hudRuneText[rune]
valWidth += text.width
if text.height > valHeight {
valHeight = text.height
}
}
x = float32(winWidth)/4*float32(i) - valWidth/2
y -= valHeight * 1.5
for _, rune := range val {
text := hudRuneText[rune]
text.render(x, y)
x += text.width
}
i++
}
renderText(game.HUDItemSpeed, formattedSpeed(g))
renderText(game.HUDItemTime, formattedTime(g))
renderText(game.HUDItemScore, formattedScore(g))
}
示例15: renderMenu
func renderMenu(g *game.Game, fudge float32) {
ease := func(start, change float32) float32 {
return easeOutCubic(g.StateProgress(fudge), start, change)
}
alpha := float32(1)
switch g.State {
case game.GameInitial, game.GamePaused:
alpha = ease(0, 1)
case game.GamePlaying, game.GameExiting:
alpha = ease(1, -1)
}
// Don't render the menu if it is invisible.
if alpha == 0 {
return
}
gl.UniformMatrix4fv(projectionViewMatrixUniform, 1, false, &orthoProjectionViewMatrix[0])
gl.Uniform1f(grayscaleUniform, 0)
gl.Uniform1f(brightnessUniform, 0)
gl.Uniform1f(alphaUniform, alpha)
gl.Uniform1f(mixAmountUniform, 0)
menu := g.Menu
titleText := menuTitleText[menu.ID]
totalHeight := titleText.height * 2
for _, item := range menu.Items {
totalHeight += float32(menuItemFontSize) * 2
if !item.SingleChoice() {
totalHeight += float32(menuItemFontSize) * 2
}
}
currentY := (float32(winHeight) + totalHeight) / 2
centerX := func(txt *renderableText) float32 {
return (float32(winWidth) - txt.width) / 2
}
renderText := func(text *renderableText) {
currentY -= text.height
text.render(centerX(text), currentY)
currentY -= text.height // add spacing for next item
}
// TODO(btmura): split these out into separate functions
renderSlider := func(item *game.MenuItem) {
val := strconv.Itoa(item.Slider.Value)
var valWidth, valHeight float32
for _, rune := range val {
text := menuRuneText[rune]
valWidth += text.width
if text.height > valHeight {
valHeight = text.height
}
}
currentY -= valHeight
x := (float32(winWidth) - valWidth) / 2
for _, rune := range val {
text := menuRuneText[rune]
text.render(x, currentY)
x += text.width
}
currentY -= valHeight
}
renderMenuItem := func(index int, item *game.MenuItem) {
var brightness float32
if menu.FocusedIndex == index {
switch {
case menu.Selected:
brightness = pulse(g.GlobalPulse+fudge, 1, 1, 1)
case item.SingleChoice():
brightness = pulse(g.GlobalPulse+fudge, 1, 0.3, 0.06)
default:
brightness = 1
}
}
gl.Uniform1f(brightnessUniform, brightness)
renderText(menuItemText[item.ID])
switch {
case item.Selector != nil:
renderText(menuChoiceText[item.Selector.Value()])
case item.Slider != nil:
renderSlider(item)
}
}
renderText(titleText)
for i, item := range menu.Items {
renderMenuItem(i, item)
}
//.........这里部分代码省略.........