本文整理汇总了Golang中github.com/go-gl/gl.DrawArrays函数的典型用法代码示例。如果您正苦于以下问题:Golang DrawArrays函数的具体用法?Golang DrawArrays怎么用?Golang DrawArrays使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DrawArrays函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Draw
func (m *Map) Draw() {
// gl.Enable(gl.PRIMITIVE_RESTART)
// gl.PrimitiveRestartIndex(PRIMITIVE_RESTART)
gl.EnableClientState(gl.VERTEX_ARRAY)
gl.Translatef(float32(m.gridSize/2), float32(m.gridSize/2), 0)
if m.renderSmooth {
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.Enable(gl.POLYGON_SMOOTH)
gl.Hint(gl.POLYGON_SMOOTH_HINT, gl.NICEST)
}
if m.renderMode == 1 {
gl.LineWidth(1)
gl.VertexPointer(2, gl.FLOAT, 0, m.gridLines)
gl.Color3f(0.2, 0.2, 0.2)
gl.DrawArrays(gl.LINES, 0, len(m.gridLines)/2)
gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE)
}
for _, vl := range m.vl {
if len(vl.vertices) > 0 {
gl.VertexPointer(2, gl.FLOAT, 0, vl.vertices)
gl.Color3f(vl.colors[0], vl.colors[1], vl.colors[2])
gl.DrawElements(gl.TRIANGLES, len(vl.indices), gl.UNSIGNED_INT, vl.indices)
}
}
}
开发者ID:sixthgear,项目名称:deformable,代码行数:31,代码来源:map.go
示例2: Draw
func (m *Map) Draw() {
gl.PushMatrix()
gl.PushAttrib(gl.CURRENT_BIT | gl.ENABLE_BIT | gl.LIGHTING_BIT | gl.POLYGON_BIT | gl.LINE_BIT)
gl.EnableClientState(gl.VERTEX_ARRAY)
gl.VertexPointer(3, gl.FLOAT, 0, m.vertices)
gl.EnableClientState(gl.NORMAL_ARRAY)
gl.NormalPointer(gl.FLOAT, 0, m.normals)
// gl.EnableClientState(gl.TEXTURE_COORD_ARRAY)
// gl.TexCoordPointer(2, gl.FLOAT, 0, m.texcoords)
gl.EnableClientState(gl.COLOR_ARRAY)
gl.ColorPointer(3, gl.FLOAT, 0, m.colors)
// draw solids
gl.Enable(gl.COLOR_MATERIAL)
// gl.DrawArrays(gl.TRIANGLE_STRIP, 0, len(m.vertices)/3)
gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE)
gl.LineWidth(1.0)
gl.Color4f(1, 1, 1, 1)
gl.DrawArrays(gl.TRIANGLE_STRIP, 0, len(m.vertices)/3)
gl.PopAttrib()
gl.PopMatrix()
}
开发者ID:sixthgear,项目名称:landscapes,代码行数:30,代码来源:map.go
示例3: main
func main() {
if !glfw.Init() {
log.Fatal("glfw failed to initialize")
}
defer glfw.Terminate()
window, err := glfw.CreateWindow(640, 480, "Deformable", nil, nil)
if err != nil {
log.Fatal(err.Error())
}
window.MakeContextCurrent()
glfw.SwapInterval(1)
window.SetMouseButtonCallback(handleMouseButton)
window.SetKeyCallback(handleKeyDown)
window.SetInputMode(glfw.Cursor, glfw.CursorHidden)
gl.Init()
initGL()
i := 16
m = GenerateMap(1600/i, 1200/i, i)
for running && !window.ShouldClose() {
x, y := window.GetCursorPosition()
if drawing != 0 {
m.Add(int(x)+int(camera[0]), int(y)+int(camera[1]), drawing, brushSizes[currentBrushSize])
}
gl.Clear(gl.COLOR_BUFFER_BIT)
gl.LoadIdentity()
gl.PushMatrix()
gl.PushAttrib(gl.CURRENT_BIT | gl.ENABLE_BIT | gl.LIGHTING_BIT | gl.POLYGON_BIT | gl.LINE_BIT)
gl.Translatef(-camera[0], -camera[1], 0)
m.Draw()
gl.PopAttrib()
gl.PopMatrix()
gl.PushAttrib(gl.COLOR_BUFFER_BIT)
gl.LineWidth(2)
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.ONE_MINUS_DST_COLOR, gl.ZERO)
// gl.Enable(gl.LINE_SMOOTH)
// gl.Hint(gl.LINE_SMOOTH_HINT, gl.NICEST)
gl.Translatef(float32(x), float32(y), 0)
gl.EnableClientState(gl.VERTEX_ARRAY)
gl.VertexPointer(2, gl.DOUBLE, 0, cursorVerts)
gl.DrawArrays(gl.LINE_LOOP, 0, 24)
gl.PopAttrib()
window.SwapBuffers()
glfw.PollEvents()
}
}
开发者ID:sixthgear,项目名称:deformable,代码行数:60,代码来源:main.go
示例4: main
func main() {
if err := glfw.Init(); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
return
}
defer glfw.Terminate()
glfw.OpenWindowHint(glfw.FsaaSamples, 4)
glfw.OpenWindowHint(glfw.OpenGLVersionMajor, 3)
glfw.OpenWindowHint(glfw.OpenGLVersionMinor, 3)
glfw.OpenWindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)
if err := glfw.OpenWindow(1024, 768, 0, 0, 0, 0, 32, 0, glfw.Windowed); err != nil {
fmt.Fprintf(os.Stderr, "%s\n", err.Error())
return
}
gl.Init() // Can't find gl.GLEW_OK or any variation, not sure how to check if this worked
gl.GetError() // Ignore error
glfw.SetWindowTitle("Tutorial 02")
glfw.Enable(glfw.StickyKeys)
gl.ClearColor(0., 0., 0.4, 0.)
prog := helper.MakeProgram("SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader")
vBufferData := [...]float32{
-1., -1., 0.,
1., -1., 0.,
0., 1., 0.}
vertexArray := gl.GenVertexArray()
vertexArray.Bind()
buffer := gl.GenBuffer()
buffer.Bind(gl.ARRAY_BUFFER)
gl.BufferData(gl.ARRAY_BUFFER, len(vBufferData)*4, &vBufferData, gl.STATIC_DRAW)
// Equivalent to a do... while
for ok := true; ok; ok = (glfw.Key(glfw.KeyEsc) != glfw.KeyPress && glfw.WindowParam(glfw.Opened) == gl.TRUE) {
gl.Clear(gl.COLOR_BUFFER_BIT)
prog.Use()
attribLoc := gl.AttribLocation(0)
attribLoc.EnableArray()
buffer.Bind(gl.ARRAY_BUFFER)
attribLoc.AttribPointer(3, gl.FLOAT, false, 0, nil)
gl.DrawArrays(gl.TRIANGLES, 0, 3)
attribLoc.DisableArray()
glfw.SwapBuffers()
}
}
开发者ID:GlenKelley,项目名称:mathgl,代码行数:58,代码来源:main.go
示例5: Draw
func (ui *UIText) Draw() {
if ui.text == "" {
return
}
v := ui.align.Vector()
v.X = (v.X * ui.width)
v.Y = (v.Y * ui.height)
mat := engine.TextureMaterial
if ui.Font.IsSDF() {
mat = engine.SDFMaterial
}
mat.Begin(ui.GameObject())
mp := mat.ProjMatrix
mv := mat.ViewMatrix
mm := mat.ModelMatrix
tx := mat.Texture
ti := mat.Tiling
of := mat.Offset
color := mat.AddColor
_ = color
ui.buffer.Bind(gl.ARRAY_BUFFER)
mat.Verts.EnableArray()
mat.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
mat.UV.EnableArray()
mat.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(ui.texcoordsIndex))
camera := engine.GetScene().SceneBase().Camera
view := camera.InvertedMatrix()
model := engine.Identity()
model.Translate(v.X, v.Y, 0)
model.Mul(ui.GameObject().Transform().Matrix())
model.Translate(0.75, 0.75, 0)
/*
view := camera.Transform().Matrix()
view = view.Invert()
model := ui.GameObject().Transform().Matrix()
*/
mv.UniformMatrix4fv(false, view)
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
mm.UniformMatrix4fv(false, model)
ti.Uniform2f(1, 1)
of.Uniform2f(0, 0)
ui.Font.Bind()
tx.Uniform1i(0)
color.Uniform4f(ui.Color.R, ui.Color.G, ui.Color.B, ui.Color.A)
gl.DrawArrays(gl.QUADS, 0, ui.vertexCount)
}
开发者ID:gulinfang,项目名称:GarageEngine,代码行数:57,代码来源:UIText.go
示例6: handleText
func handleText(camera *PerspectiveCamera, text *Text) {
// Material
material := text.Material()
program := material.Program()
if program == nil {
program = createTextProgram(text)
material.SetProgram(program)
}
program.Use()
defer program.Unuse()
if c, ok := material.(Colored); ok {
if c.Color() != nil {
program.uniforms["diffuse"].apply(c.Color())
}
}
if t, ok := material.(Textured); ok {
texture := t.Texture()
if texture != nil {
gl.ActiveTexture(gl.TEXTURE0)
texture.Bind()
defer texture.Unbind()
program.uniforms["texture"].apply(texture)
}
}
for _, attribute := range program.attributes {
attribute.enable()
defer attribute.disable()
attribute.bindBuffer()
defer attribute.unbindBuffer()
attribute.pointer()
attribute.bindBuffer()
}
vertexAttrib := gl.AttribLocation(0)
vertexAttrib.EnableArray()
defer vertexAttrib.DisableArray()
text.vertexBuffer.Bind(gl.ARRAY_BUFFER)
defer text.vertexBuffer.Unbind(gl.ARRAY_BUFFER)
vertexAttrib.AttribPointer(2, gl.FLOAT, false, 0, nil)
if t, ok := material.(Wireframed); ok {
if t.Wireframe() {
gl.PolygonMode(gl.FRONT_AND_BACK, gl.LINE)
} else {
gl.PolygonMode(gl.FRONT_AND_BACK, gl.FILL)
}
}
gl.Enable(gl.BLEND)
gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
gl.DrawArrays(gl.TRIANGLES, 0, len(text.Geometry().Vertices))
}
开发者ID:nobonobo,项目名称:go-three,代码行数:56,代码来源:renderer.go
示例7: DrawSprites
func DrawSprites(tex *Texture, uvs []UV, positions []Vector, scales []Vector, rotations []float32, alings []Align, colors []Color) {
internalMaterial.Begin(nil)
mp := internalMaterial.ProjMatrix
mv := internalMaterial.ViewMatrix
mm := internalMaterial.ModelMatrix
tx := internalMaterial.Texture
ac := internalMaterial.AddColor
ti := internalMaterial.Tiling
of := internalMaterial.Offset
defaultBuffer.Bind(gl.ARRAY_BUFFER)
internalMaterial.Verts.EnableArray()
internalMaterial.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
internalMaterial.UV.EnableArray()
internalMaterial.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(12*4))
camera := GetScene().SceneBase().Camera
view := camera.InvertedMatrix()
mv.UniformMatrix4fv(false, view)
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
tex.Bind()
tx.Uniform1i(0)
for i := 0; i < len(uvs); i++ {
uv, position, scale := uvs[i], positions[i], scales[i]
if !InsideScreen(uv.Ratio, position, scale) {
continue
}
rotation, aling, color := rotations[i], alings[i], colors[i]
v := aling.Vector()
v.X *= uv.Ratio
model := Identity()
model.Translate(v.X, v.Y, 0)
model.Scale((scale.X * uv.Ratio), scale.Y, scale.Z)
model.RotateZ(rotation, -1)
model.Translate(position.X+0.75, position.Y+0.75, position.Z)
mm.UniformMatrix4fv(false, model)
ac.Uniform4f(color.R, color.G, color.B, color.A)
ti.Uniform2f(uv.U2-uv.U1, uv.V2-uv.V1)
of.Uniform2f(uv.U1, uv.V1)
gl.DrawArrays(gl.QUADS, 0, 4)
}
internalMaterial.End(nil)
}
开发者ID:gulinfang,项目名称:GarageEngine,代码行数:56,代码来源:Render.go
示例8: draw
func (c *QuadraticCurve) draw(canv *Canvas) {
p := canv.toGLPoints(c.Points())
vertices := []float32{
p[0].X, p[0].Y, 0.0, 0.0,
p[1].X, p[1].Y, 0.5, 0.0,
p[2].X, p[2].Y, 1.0, 1.0,
}
gl.BufferData(gl.ARRAY_BUFFER, len(vertices)*4, vertices, gl.STATIC_DRAW)
gl.DrawArrays(gl.TRIANGLES, 0, 3)
}
开发者ID:rdterner,项目名称:gosgl,代码行数:10,代码来源:gosgl.go
示例9: Draw
func (sp *Sprite) Draw() {
if sp.Texture != nil && sp.Render {
/*
Temporal camera distance check
*/
currentUV := sp.UVs[int(sp.animation)]
if !InsideScreen(currentUV.Ratio, sp.Transform().WorldPosition(), sp.Transform().WorldScale()) {
return
}
renders++
TextureMaterial.Begin(sp.GameObject())
mp := TextureMaterial.ProjMatrix
mv := TextureMaterial.ViewMatrix
mm := TextureMaterial.ModelMatrix
tx := TextureMaterial.Texture
ac := TextureMaterial.AddColor
ti := TextureMaterial.Tiling
of := TextureMaterial.Offset
defaultBuffer.Bind(gl.ARRAY_BUFFER)
TextureMaterial.Verts.EnableArray()
TextureMaterial.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
TextureMaterial.UV.EnableArray()
TextureMaterial.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(12*4))
v := sp.align.Vector()
v.X *= currentUV.Ratio
camera := GetScene().SceneBase().Camera
view := camera.InvertedMatrix()
model := Identity()
model.Scale(currentUV.Ratio, 1, 1)
model.Translate(v.X, v.Y, 0)
model.Mul(sp.GameObject().Transform().Matrix())
mv.UniformMatrix4f(false, (*[16]float32)(&view))
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
mm.UniformMatrix4f(false, (*[16]float32)(&model))
sp.Bind()
tx.Uniform1i(0)
ac.Uniform4f(sp.Color.R, sp.Color.G, sp.Color.B, sp.Color.A)
ti.Uniform2f((currentUV.U2-currentUV.U1)*sp.Tiling.X, (currentUV.V2-currentUV.V1)*sp.Tiling.Y)
of.Uniform2f(currentUV.U1, currentUV.V1)
gl.DrawArrays(gl.QUADS, 0, 4)
TextureMaterial.End(sp.GameObject())
}
}
开发者ID:gulinfang,项目名称:GarageEngine,代码行数:54,代码来源:Sprite.go
示例10: Render
func (r *Renderer) Render() {
gl.Clear(gl.COLOR_BUFFER_BIT)
r.prog.Use()
r.vao.Bind()
r.vbo.Bind(gl.ARRAY_BUFFER)
gl.DrawArrays(gl.POINTS, 0, len(r.vertices))
// FIXME: unbind vao/vbo/prog?
}
开发者ID:fatman2021,项目名称:mapeditor,代码行数:12,代码来源:renderer.go
示例11: DrawScreen
func (sp *Sprite) DrawScreen() {
if sp.Texture != nil && sp.Render {
camera := GetScene().SceneBase().Camera
pos := sp.Transform().WorldPosition()
scale := sp.Transform().WorldScale()
TextureMaterial.Begin(sp.GameObject())
mp := TextureMaterial.ProjMatrix
mv := TextureMaterial.ViewMatrix
mm := TextureMaterial.ModelMatrix
tx := TextureMaterial.Texture
ac := TextureMaterial.AddColor
ti := TextureMaterial.Tiling
of := TextureMaterial.Offset
defaultBuffer.Bind(gl.ARRAY_BUFFER)
TextureMaterial.Verts.EnableArray()
TextureMaterial.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
TextureMaterial.UV.EnableArray()
TextureMaterial.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(12*4))
currentUV := sp.UVs[int(sp.animation)]
view := Identity()
model := Identity()
model.Scale(scale.X*currentUV.Ratio, scale.Y, 1)
model.Translate((float32(Width)/2)+pos.X+0.75, (float32(Height)/2)+pos.Y+0.75, 1)
mv.UniformMatrix4fv(false, view)
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
mm.UniformMatrix4fv(false, model)
ti.Uniform2f((currentUV.U2-currentUV.U1)*sp.Tiling.X, (currentUV.V2-currentUV.V1)*sp.Tiling.Y)
of.Uniform2f(currentUV.U1, currentUV.V1)
sp.Bind()
gl.ActiveTexture(gl.TEXTURE0)
tx.Uniform1i(0)
//ac.Uniform4f(1, 1, 1, 0)
ac.Uniform4f(sp.Color.R, sp.Color.G, sp.Color.B, sp.Color.A)
gl.DrawArrays(gl.QUADS, 0, 4)
TextureMaterial.End(sp.GameObject())
}
}
开发者ID:gulinfang,项目名称:GarageEngine,代码行数:49,代码来源:Sprite.go
示例12: DrawSprite
func DrawSprite(tex *Texture, uv UV, position Vector, scale Vector, rotation float32, aling Align, color Color) {
if !InsideScreen(uv.Ratio, position, scale) {
return
}
internalMaterial.Begin(nil)
mp := internalMaterial.ProjMatrix
mv := internalMaterial.ViewMatrix
mm := internalMaterial.ModelMatrix
tx := internalMaterial.Texture
ac := internalMaterial.AddColor
ti := internalMaterial.Tiling
of := internalMaterial.Offset
defaultBuffer.Bind(gl.ARRAY_BUFFER)
internalMaterial.Verts.EnableArray()
internalMaterial.Verts.AttribPointer(3, gl.FLOAT, false, 0, uintptr(0))
internalMaterial.UV.EnableArray()
internalMaterial.UV.AttribPointer(2, gl.FLOAT, false, 0, uintptr(12*4))
v := aling.Vector()
v.X *= uv.Ratio
camera := GetScene().SceneBase().Camera
view := camera.InvertedMatrix()
model := Identity()
model.Translate(v.X, v.Y, 0)
model.Scale(scale.X*uv.Ratio, scale.Y, scale.Z)
model.RotateZ(rotation, -1)
model.Translate(position.X+0.75, position.Y+0.75, position.Z)
mv.UniformMatrix4fv(false, view)
mp.UniformMatrix4f(false, (*[16]float32)(camera.Projection))
mm.UniformMatrix4fv(false, model)
ac.Uniform4i(int(color.R), int(color.G), int(color.B), int(color.A))
ti.Uniform2f(uv.U2-uv.U1, uv.V2-uv.V1)
of.Uniform2f(uv.U1, uv.V1)
tx.Uniform1i(0)
tex.Bind()
gl.DrawArrays(gl.QUADS, 0, 4)
internalMaterial.End(nil)
}
开发者ID:gulinfang,项目名称:GarageEngine,代码行数:48,代码来源:Render.go
示例13: renderOne
func (self *OpenGLRenderer) renderOne(operation render.RenderOperation, renderState RenderState) {
mesh := operation.Mesh
material := operation.Material
transform := operation.Transform
// No attributes? no loaded or empty? Better way to handle this than spamming
// the console?
if mesh.VertexArrayObj == nil {
log.Println("WARNING: Trying to render an invalid mesh", mesh)
return
}
vertexArrayObj := mesh.VertexArrayObj.(gl.VertexArray)
vertexArrayObj.Bind()
material.Shader.Program.Use()
material.Shader.Program.SetUniformMatrix(
"modelViewProjection",
renderState.ViewProjection.Times(transform),
)
if material.Texture != nil {
glTexture := material.Texture.Id.(gl.Texture)
gl.ActiveTexture(gl.TEXTURE0)
if !material.IsCubeMap {
glTexture.Bind(gl.TEXTURE_2D)
defer glTexture.Unbind(gl.TEXTURE_2D)
material.Shader.Program.SetUniformUnit("textureSampler", 0)
} else {
gl.Disable(gl.DEPTH_TEST)
defer gl.Enable(gl.DEPTH_TEST)
glTexture.Bind(gl.TEXTURE_CUBE_MAP)
defer glTexture.Unbind(gl.TEXTURE_CUBE_MAP)
material.Shader.Program.SetUniformUnit("cubeMap", 0)
}
}
if len(mesh.IndexList) == 0 {
gl.DrawArrays(gl.TRIANGLES, 0, len(mesh.VertexList)*3)
} else {
gl.DrawElements(gl.TRIANGLES, len(mesh.IndexList), gl.UNSIGNED_INT, nil)
}
}
开发者ID:jasonroelofs,项目名称:slartibartfast,代码行数:45,代码来源:opengl_renderer.go
示例14: renderArrays
// Arrays mode uses vertex arrays which involves gl*Pointer calls and
// directly passing in the vertex data on every render pass. This is slower
// than using VBO's, because the data has to be uploaded to the GPU on every
// render pass, but it is useful for older systems where glBufferData is
// not available.
func (mb *MeshBuffer) renderArrays(mode gl.GLenum, m Mesh, pa, ca, na, ta, ia *Attr) {
ps, pc := m[mbPositionKey][0], m[mbPositionKey][1]
is, ic := m[mbIndexKey][0], m[mbIndexKey][1]
cc := m[mbColorKey][1]
nc := m[mbNormalKey][1]
tc := m[mbTexCoordKey][1]
gl.PushClientAttrib(gl.CLIENT_VERTEX_ARRAY_BIT)
defer gl.PopClientAttrib()
if pc > 0 {
gl.EnableClientState(gl.VERTEX_ARRAY)
defer gl.DisableClientState(gl.VERTEX_ARRAY)
gl.VertexPointer(pa.size, pa.typ, 0, pa.ptr(0))
}
if cc > 0 {
gl.EnableClientState(gl.COLOR_ARRAY)
defer gl.DisableClientState(gl.COLOR_ARRAY)
gl.ColorPointer(ca.size, ca.typ, 0, ca.ptr(0))
}
if nc > 0 {
gl.EnableClientState(gl.NORMAL_ARRAY)
defer gl.DisableClientState(gl.NORMAL_ARRAY)
gl.NormalPointer(na.typ, 0, na.ptr(0))
}
if tc > 0 {
gl.EnableClientState(gl.TEXTURE_COORD_ARRAY)
defer gl.DisableClientState(gl.TEXTURE_COORD_ARRAY)
gl.TexCoordPointer(ta.size, ta.typ, 0, ta.ptr(0))
}
if ic > 0 {
gl.EnableClientState(gl.INDEX_ARRAY)
defer gl.DisableClientState(gl.INDEX_ARRAY)
gl.IndexPointer(ia.typ, 0, ia.ptr(0))
gl.DrawElements(mode, ic, ia.typ, ia.ptr(is*ia.size))
} else {
gl.DrawArrays(mode, ps, pc)
}
}
开发者ID:andrebq,项目名称:glh,代码行数:48,代码来源:meshbuffer.go
示例15: Tick
func Tick() {
timer = float32(glfw.Time())
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
program.Use()
camera.Tick()
modelViewMatrixUniform.UniformMatrix4fv(camera.modelViewMatrix[:])
projectionMatrixUniform.UniformMatrix4fv(camera.projectionMatrix[:])
timerUniform.Uniform1f(timer)
positionAttrib.EnableArray()
texcoordAttrib.EnableArray()
gl.ActiveTexture(gl.TEXTURE0)
textures[0].Bind(gl.TEXTURE_2D)
textureUniforms[0].Uniform1i(0)
gl.ActiveTexture(gl.TEXTURE1)
textures[1].Bind(gl.TEXTURE_2D)
textureUniforms[1].Uniform1i(1)
sizeOfVertex := int(unsafe.Sizeof(Vertex{}))
posoffset := uintptr(0)
texoffset := unsafe.Offsetof(Vertex{}.texcoord)
for _, renderObject := range renderObjects {
renderObject.vertexBuffer.Bind(gl.ARRAY_BUFFER)
positionAttrib.AttribPointer(3, gl.FLOAT, false, sizeOfVertex, posoffset)
texcoordAttrib.AttribPointer(2, gl.FLOAT, false, sizeOfVertex, texoffset)
gl.DrawArrays(gl.TRIANGLES, 0, renderObject.numVerticies)
}
positionAttrib.DisableArray()
texcoordAttrib.DisableArray()
gl.ProgramUnuse()
glfw.SwapBuffers()
}
开发者ID:samnm,项目名称:goblocks,代码行数:41,代码来源:renderer.go
示例16: render
func (d *DrawImage) render() error {
fn := func(idx int) (err error) {
defer func() {
//err = recover()
}()
vbuf := gl.GenBuffer()
vbuf.Bind(gl.ARRAY_BUFFER)
gl.BufferData(gl.ARRAY_BUFFER, len(d.vertex[idx])*4, d.vertex[idx], gl.STATIC_DRAW)
panicGlError()
defer vbuf.Delete()
uvbuf := gl.GenBuffer()
uvbuf.Bind(gl.ARRAY_BUFFER)
gl.BufferData(gl.ARRAY_BUFFER, len(d.uv[idx])*4, d.uv[idx], gl.STATIC_DRAW)
panicGlError()
defer uvbuf.Delete()
vloc := gl.AttribLocation(0)
vloc.EnableArray()
vbuf.Bind(gl.ARRAY_BUFFER)
vloc.AttribPointer(3, gl.FLOAT, false, 0, nil)
panicGlError()
defer vloc.DisableArray()
uvloc := gl.AttribLocation(1)
uvloc.EnableArray()
uvbuf.Bind(gl.ARRAY_BUFFER)
uvloc.AttribPointer(2, gl.FLOAT, false, 0, nil)
panicGlError()
defer uvloc.DisableArray()
gl.DrawArrays(gl.TRIANGLES, 0, 3)
return checkGlError()
}
if err := fn(0); err != nil {
return err
}
return fn(1)
}
开发者ID:andrebq,项目名称:exp,代码行数:40,代码来源:commands.go
示例17: render
func (this *Game) render() {
gl.ClearColor(0, 0, 0, 0)
gl.Clear(gl.COLOR_BUFFER_BIT)
switch this.gameState {
case initialized:
this.text.Printf(0.75, -1, "Hit space to play!")
case running:
this.program.Use()
this.vao.Bind()
this.elements.Each(func(_ int, e Element) {
if e.isDead() {
return
}
location := e.Location()
scale := float32(e.Size())
translateMatrix := NewMatrix4x4(1.0)
translateMatrix[3] = Vector4{float32(location.x), float32(location.y), -1, 1}
scaleMatrix := NewMatrix4x4(1.0)
scaleMatrix[0].x = scale
scaleMatrix[1].y = scale
modelToCameraMatrix := translateMatrix.mult(scaleMatrix)
clipMatrix := this.cameraToClipMatrix.mult(modelToCameraMatrix)
var clipMatrixArray = clipMatrix.toa()
this.cameraToClipMatrixUniform.UniformMatrix4f(false, &clipMatrixArray)
this.colorUniform.Uniform4fv(1, e.Color())
gl.DrawArrays(gl.LINE_LOOP, 0, 100)
})
this.vao.Unbind()
this.program.Unuse()
this.text.Printf(0.05, 0, "Score: %d", this.player.score)
this.text.Printf(0.35, 0, "Distance travelled: %f", this.totalTime*10)
case won:
this.text.Printf(0.75, -1, "You won! Hit space to play again.")
case lost:
this.text.Printf(0.5, -1, "You lost! Hit space to play again.")
}
}
开发者ID:jimarnold,项目名称:gon,代码行数:38,代码来源:game.go
示例18: glDraw
func (p *Path) glDraw(canv *Canvas) {
for e := p.Segs.Front(); e != nil; e = e.Next() {
e.Value.(PathSegment).Draw(canv)
}
if GetPt(p.endPoints.Back()).Mathgl().ApproxEqual(
GetPt(p.endPoints.Front()).Mathgl()) {
p.endPoints.Remove(p.endPoints.Back())
}
if p.endPoints.Len() < 3 {
return
}
gGl.Activate(gGl.TriangleDrawer)
gl.BlendFunc(gl.ONE_MINUS_DST_ALPHA, gl.ZERO)
defer gl.BlendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA)
pa := make(p2t.PointArray, 0, p.endPoints.Len())
for e := p.endPoints.Front(); e != nil; e = e.Next() {
p := GetPt(e)
pa = append(pa, &p2t.Point{X: float64(p.X), Y: float64(p.Y)})
}
p2t.Init(pa)
triArr := p2t.Triangulate()
vertices := make([]float32, 6, 6)
for _, tri := range triArr {
for i, triPt := range tri.Point {
pt := canv.toGLPoint(Pt(triPt.X, triPt.Y))
vertices[i*2] = pt.X
vertices[i*2+1] = pt.Y
}
gl.BufferData(gl.ARRAY_BUFFER, len(vertices)*4, vertices, gl.STATIC_DRAW)
gl.DrawArrays(gl.TRIANGLES, 0, 3)
}
}
开发者ID:rdterner,项目名称:gosgl,代码行数:37,代码来源:gosgl.go
示例19: renderBuffered
// renderBuffered uses VBO's. This is the preferred mode for systems
// where shader support is not present or deemed necessary.
func (mb *MeshBuffer) renderBuffered(mode gl.GLenum, m Mesh, pa, ca, na, ta, ia *Attr) {
ps, pc := m[mbPositionKey][0], m[mbPositionKey][1]
is, ic := m[mbIndexKey][0], m[mbIndexKey][1]
cc := m[mbColorKey][1]
nc := m[mbNormalKey][1]
tc := m[mbTexCoordKey][1]
if pc > 0 {
gl.EnableClientState(gl.VERTEX_ARRAY)
defer gl.DisableClientState(gl.VERTEX_ARRAY)
pa.bind()
if pa.Invalid() {
pa.buffer()
}
gl.VertexPointer(pa.size, pa.typ, 0, uintptr(0))
pa.unbind()
}
if cc > 0 {
gl.EnableClientState(gl.COLOR_ARRAY)
defer gl.DisableClientState(gl.COLOR_ARRAY)
ca.bind()
if ca.Invalid() {
ca.buffer()
}
gl.ColorPointer(ca.size, ca.typ, 0, uintptr(0))
ca.unbind()
}
if nc > 0 {
gl.EnableClientState(gl.NORMAL_ARRAY)
defer gl.DisableClientState(gl.NORMAL_ARRAY)
na.bind()
if na.Invalid() {
na.buffer()
}
gl.NormalPointer(na.typ, 0, uintptr(0))
na.unbind()
}
if tc > 0 {
gl.EnableClientState(gl.TEXTURE_COORD_ARRAY)
defer gl.DisableClientState(gl.TEXTURE_COORD_ARRAY)
ta.bind()
if ta.Invalid() {
ta.buffer()
}
gl.TexCoordPointer(ta.size, ta.typ, 0, uintptr(0))
ta.unbind()
}
if ic > 0 {
ia.bind()
if ia.Invalid() {
ia.buffer()
}
gl.PushClientAttrib(gl.CLIENT_VERTEX_ARRAY_BIT)
gl.DrawElements(mode, ic, ia.typ, uintptr(is*ia.stride))
gl.PopClientAttrib()
ia.unbind()
} else {
pa.bind()
gl.PushClientAttrib(gl.CLIENT_VERTEX_ARRAY_BIT)
gl.DrawArrays(mode, ps, pc)
gl.PopClientAttrib()
pa.unbind()
}
}
开发者ID:nobonobo,项目名称:glh,代码行数:76,代码来源:meshbuffer.go
示例20: Render
func (r *RenderTarget) Render(verts []Vertex, primType PrimitiveType, states RenderStates) {
// Nothing to draw?
if len(verts) == 0 {
return
}
// First set the persistent OpenGL states if it's the very first call
if !r.glStatesSet {
r.resetGlStates()
}
// Check if the vertex count is low enough so that we can pre-transform them
useVertexCache := len(verts) <= vertexCacheSize
if useVertexCache {
// Pre-transform the vertices and store them into the vertex cache
for i := 0; i < len(verts); i++ {
r.vpCache[i] = states.Transform.TransformPoint(verts[i].Pos)
r.vcCache[i] = verts[i].Color
r.vtCache[i] = verts[i].TexCoords
}
// Since vertices are transformed, we must use an identity transform to render them
if !r.useVertexCache {
r.applyTransform(IdentityTransform())
}
} else {
r.applyTransform(states.Transform)
}
// Apply the view
if r.viewChanged {
r.applyCurrentView()
}
// Apply the blend mode
if states.BlendMode != r.lastBlendMode {
r.applyBlendMode(states.BlendMode)
}
// Apply the texture
var textureId uint64
if states.Texture != nil {
textureId = states.Texture.cacheId
}
if textureId != r.lastTextureId {
r.applyTexture(states.Texture)
}
// Apply the shader
// TODO
/*if states.shader {
applyShader(states.shader);
}*/
// #########################################
if !useVertexCache {
// Find the OpenGL primitive type
modes := [...]gl.GLenum{gl.POINTS, gl.LINES, gl.LINE_STRIP, gl.TRIANGLES,
gl.TRIANGLE_STRIP, gl.TRIANGLE_FAN, gl.QUADS}
mode := modes[primType]
gl.Begin(mode)
for i, _ := range verts {
gl.TexCoord2f(verts[i].TexCoords.X, verts[i].TexCoords.Y)
gl.Color4f(float32(verts[i].Color.R)/255, float32(verts[i].Color.G)/255,
float32(verts[i].Color.B)/255, float32(verts[i].Color.A)/255)
gl.Vertex2f(verts[i].Pos.X, verts[i].Pos.Y)
}
gl.End()
}
// #########################################
// Setup the pointers to the vertices' components
// ... and if we already used it previously, we don't need to set the pointers again
if useVertexCache {
if !r.useVertexCache {
gl.VertexPointer(2, gl.FLOAT, 0, r.vpCache[:])
gl.ColorPointer(4, gl.UNSIGNED_BYTE, 0, r.vcCache[:])
gl.TexCoordPointer(2, gl.FLOAT, 0, r.vtCache[:])
}
// Find the OpenGL primitive type
modes := [...]gl.GLenum{gl.POINTS, gl.LINES, gl.LINE_STRIP, gl.TRIANGLES,
gl.TRIANGLE_STRIP, gl.TRIANGLE_FAN, gl.QUADS}
mode := modes[primType]
// Draw the primitives
gl.DrawArrays(mode, 0, len(verts))
}
// Unbind the shader, if any
// TODO
/*if (states.shader) {
r.applyShader(nil)
}*/
//.........这里部分代码省略.........
开发者ID:BrunoAssis,项目名称:gosfml,代码行数:101,代码来源:rendertarget.go
注:本文中的github.com/go-gl/gl.DrawArrays函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论