本文整理汇总了Golang中github.com/go-gl/gl/v4/1-core/gl.EnableVertexAttribArray函数的典型用法代码示例。如果您正苦于以下问题:Golang EnableVertexAttribArray函数的具体用法?Golang EnableVertexAttribArray怎么用?Golang EnableVertexAttribArray使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了EnableVertexAttribArray函数的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: createTriangleVAO
/*
* Creates the Vertex Array Object for a triangle.
*/
func createTriangleVAO(vertices []float32, indices []uint32) uint32 {
var VAO uint32
gl.GenVertexArrays(1, &VAO)
var VBO uint32
gl.GenBuffers(1, &VBO)
var EBO uint32
gl.GenBuffers(1, &EBO)
// Bind the Vertex Array Object first, then bind and set vertex buffer(s) and attribute pointers()
gl.BindVertexArray(VAO)
// copy vertices data into VBO (it needs to be bound first)
gl.BindBuffer(gl.ARRAY_BUFFER, VBO)
gl.BufferData(gl.ARRAY_BUFFER, len(vertices)*4, gl.Ptr(vertices), gl.STATIC_DRAW)
// copy indices into element buffer
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, EBO)
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, len(indices)*4, gl.Ptr(indices), gl.STATIC_DRAW)
// position
gl.VertexAttribPointer(0, 3, gl.FLOAT, false, 6*4, gl.PtrOffset(0))
gl.EnableVertexAttribArray(0)
// color
gl.VertexAttribPointer(1, 3, gl.FLOAT, false, 6*4, gl.PtrOffset(3*4))
gl.EnableVertexAttribArray(1)
// unbind the VAO (safe practice so we don't accidentally (mis)configure it later)
gl.BindVertexArray(0)
return VAO
}
开发者ID:cstegel,项目名称:opengl-samples-golang,代码行数:38,代码来源:main.go
示例2: Load
// Load loads and sets up the model
func (m *Model) Load(fileName string) {
m.loadFile(fileName)
shader := sm.Shader{VertSrcFile: m.data.VertShaderFile, FragSrcFile: m.data.FragShaderFile, Name: fmt.Sprintf("%s:%s", m.data.VertShaderFile, m.data.FragShaderFile)}
program, err := m.shaders.LoadProgram(shader, false)
if err != nil {
return
}
m.currentProgram = program
gl.UseProgram(m.currentProgram)
m.projection = mgl32.Perspective(mgl32.DegToRad(45.0), float32(windowWidth)/windowHeight, 0.1, 10.0)
m.projectionUniform = gl.GetUniformLocation(m.currentProgram, gl.Str("projection\x00"))
gl.UniformMatrix4fv(m.projectionUniform, 1, false, &m.projection[0])
m.camera = mgl32.LookAtV(mgl32.Vec3{3, 3, 3}, mgl32.Vec3{0, 0, 0}, mgl32.Vec3{0, 1, 0})
m.cameraUniform = gl.GetUniformLocation(m.currentProgram, gl.Str("camera\x00"))
gl.UniformMatrix4fv(m.cameraUniform, 1, false, &m.camera[0])
m.modelUniform = gl.GetUniformLocation(m.currentProgram, gl.Str("model\x00"))
gl.UniformMatrix4fv(m.modelUniform, 1, false, &m.model[0])
m.textureUniform = gl.GetUniformLocation(m.currentProgram, gl.Str("tex\x00"))
gl.Uniform1i(m.textureUniform, 0)
gl.BindFragDataLocation(m.currentProgram, 0, gl.Str("outputColor\x00"))
// Load the texture
m.textures.LoadTexture(m.data.TextureFile, m.data.TextureFile)
// Configure the vertex data
gl.GenVertexArrays(1, &m.vao)
gl.BindVertexArray(m.vao)
var vbo uint32
gl.GenBuffers(1, &vbo)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
gl.BufferData(gl.ARRAY_BUFFER, len(m.data.Verts)*4, gl.Ptr(m.data.Verts), gl.STATIC_DRAW)
vertAttrib := uint32(gl.GetAttribLocation(m.currentProgram, gl.Str("vert\x00")))
gl.EnableVertexAttribArray(vertAttrib)
gl.VertexAttribPointer(vertAttrib, 3, gl.FLOAT, false, m.data.VertSize*4, gl.PtrOffset(0)) // 4:number of bytes in a float32
texCoordAttrib := uint32(gl.GetAttribLocation(m.currentProgram, gl.Str("vertTexCoord\x00")))
gl.EnableVertexAttribArray(texCoordAttrib)
gl.VertexAttribPointer(texCoordAttrib, 2, gl.FLOAT, true, m.data.VertSize*4, gl.PtrOffset(3*4)) // 4:number of bytes in a float32
if m.data.Indexed {
var indices uint32
gl.GenBuffers(1, &indices)
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, indices)
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, len(m.data.Indices)*4, gl.Ptr(m.data.Indices), gl.STATIC_DRAW)
}
gl.BindVertexArray(0)
}
开发者ID:Ariemeth,项目名称:frame-assault-2,代码行数:59,代码来源:model.go
示例3: NewBillboard
// NewBillboard creates a 2D billboard for rendering
func (font *Font) NewBillboard(text string, maxWidth int, maxHeight int, size float64, dpi float64, color color.Color) *Billboard {
b := &Billboard{}
b.texWidth = maxWidth
b.texHeight = maxHeight
image, renderedWidth, renderedHeight := font.createTexture(text, b.texWidth, b.texHeight, size, dpi, color)
b.size = size
b.dpi = dpi
b.text = text
b.font = font
b.rgba = color
b.Width = renderedWidth
b.Height = renderedHeight
var vao uint32
gl.GenVertexArrays(1, &vao)
gl.BindVertexArray(vao)
var vbo uint32
gl.GenBuffers(1, &vbo)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
w := float32(maxWidth)
h := float32(maxHeight)
billboardVertices := []float32{
w, h, 0.0, 1.0, 1.0,
0.0, 0.0, 0.0, 0.0, 0.0,
0.0, h, 0.0, 0.0, 1.0,
w, h, 0.0, 1.0, 1.0,
0.0, 0.0, 0.0, 0.0, 0.0,
w, 0.0, 0.0, 1.0, 0.0,
}
gl.BufferData(gl.ARRAY_BUFFER, len(billboardVertices)*4, gl.Ptr(billboardVertices), gl.STATIC_DRAW)
vertAttrib := uint32(0)
gl.EnableVertexAttribArray(vertAttrib)
gl.VertexAttribPointer(vertAttrib, 3, gl.FLOAT, false, 5*4, gl.PtrOffset(0))
texCoordAttrib := uint32(1)
gl.EnableVertexAttribArray(texCoordAttrib)
gl.VertexAttribPointer(texCoordAttrib, 2, gl.FLOAT, false, 5*4, gl.PtrOffset(3*4))
b.vao = vao
b.image = image
return b
}
开发者ID:anthonyrego,项目名称:gosmf,代码行数:54,代码来源:draw.go
示例4: setup
func (self *Application) setup() error {
gl.GenVertexArrays(1, &self.Triangles)
gl.BindVertexArray(self.Triangles)
trianglesVertices := []float32{
-0.9, -0.9,
0.85, -0.9,
-0.9, 0.85,
0.9, -0.85,
0.9, 0.9,
-0.85, 0.9,
}
gl.GenBuffers(1, &self.ArrayBuffer)
gl.BindBuffer(gl.ARRAY_BUFFER, self.ArrayBuffer)
gl.BufferData(gl.ARRAY_BUFFER, len(trianglesVertices)*4, gl.Ptr(trianglesVertices), gl.STATIC_DRAW)
program, err := util.LoadShaders([]util.ShaderInfo{
util.ShaderInfo{gl.VERTEX_SHADER, "triangles.vert"},
util.ShaderInfo{gl.FRAGMENT_SHADER, "triangles.frag"},
})
if err != nil {
return err
}
gl.UseProgram(program)
gl.VertexAttribPointer(vPosition, 2, gl.FLOAT, false, 0, gl.Ptr(nil))
gl.EnableVertexAttribArray(vPosition)
return nil
}
开发者ID:alex-ac,项目名称:redbook-go,代码行数:31,代码来源:main.go
示例5: createVAO
/*
* Creates the Vertex Array Object for a triangle.
* indices is leftover from earlier samples and not used here.
*/
func createVAO(vertices []float32, indices []uint32) uint32 {
var VAO uint32
gl.GenVertexArrays(1, &VAO)
var VBO uint32
gl.GenBuffers(1, &VBO)
var EBO uint32
gl.GenBuffers(1, &EBO)
// Bind the Vertex Array Object first, then bind and set vertex buffer(s) and attribute pointers()
gl.BindVertexArray(VAO)
// copy vertices data into VBO (it needs to be bound first)
gl.BindBuffer(gl.ARRAY_BUFFER, VBO)
gl.BufferData(gl.ARRAY_BUFFER, len(vertices)*4, gl.Ptr(vertices), gl.STATIC_DRAW)
// size of one whole vertex (sum of attrib sizes)
var stride int32 = 3*4 + 2*4
var offset int = 0
// position
gl.VertexAttribPointer(0, 3, gl.FLOAT, false, stride, gl.PtrOffset(offset))
gl.EnableVertexAttribArray(0)
offset += 3 * 4
// unbind the VAO (safe practice so we don't accidentally (mis)configure it later)
gl.BindVertexArray(0)
return VAO
}
开发者ID:cstegel,项目名称:opengl-samples-golang,代码行数:36,代码来源:main.go
示例6: createTriangleVAO
/*
* Creates the Vertex Array Object for a triangle.
*/
func createTriangleVAO() uint32 {
vertices := []float32{
-0.5, -0.5, 0.0,
0.5, -0.5, 0.0,
0.0, 0.5, 0.0,
}
var VAO uint32
gl.GenVertexArrays(1, &VAO)
var VBO uint32
gl.GenBuffers(1, &VBO)
// Bind the Vertex Array Object first, then bind and set vertex buffer(s) and attribute pointers()
gl.BindVertexArray(VAO)
// copy vertices data into VBO (it needs to be bound first)
gl.BindBuffer(gl.ARRAY_BUFFER, VBO)
gl.BufferData(gl.ARRAY_BUFFER, len(vertices)*4, gl.Ptr(vertices), gl.STATIC_DRAW)
// specify the format of our vertex input
// (shader) input 0
// vertex has size 3
// vertex items are of type FLOAT
// do not normalize (already done)
// stride of 3 * sizeof(float) (separation of vertices)
// offset of where the position data starts (0 for the beginning)
gl.VertexAttribPointer(0, 3, gl.FLOAT, false, 3*4, gl.PtrOffset(0))
gl.EnableVertexAttribArray(0)
// unbind the VAO (safe practice so we don't accidentally (mis)configure it later)
gl.BindVertexArray(0)
return VAO
}
开发者ID:cstegel,项目名称:opengl-samples-golang,代码行数:38,代码来源:hello_triangle.go
示例7: AddProperty
func (me *GlObj) AddProperty(i uint32, buf []float32, size int32) {
var vbo uint32
gl.GenBuffers(1, &vbo)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
gl.BufferData(gl.ARRAY_BUFFER, len(buf)*4, gl.Ptr(buf), gl.STATIC_DRAW)
gl.EnableVertexAttribArray(i)
gl.VertexAttribPointer(i, size, gl.FLOAT, false, 0, gl.PtrOffset(0))
}
开发者ID:Nekony,项目名称:go-gl-test,代码行数:8,代码来源:core.go
示例8: AddProperty
func (me *GlObj) AddProperty(location uint32, buf []float32, size, stride int32, offset int) {
var vbo uint32
gl.GenBuffers(1, &vbo)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
gl.BufferData(gl.ARRAY_BUFFER, len(buf)*FloatSize, gl.Ptr(buf), gl.STATIC_DRAW)
gl.EnableVertexAttribArray(location)
gl.VertexAttribPointer(location, size, gl.FLOAT, false, stride*FloatSize, gl.PtrOffset(offset*FloatSize))
}
开发者ID:Nekony,项目名称:go-gl-test,代码行数:8,代码来源:test.go
示例9: renderPostEffect
func (glRenderer *OpenglRenderer) renderPostEffect(pe postEffect) {
gl.UseProgram(pe.program)
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, pe.textureId)
gl.Disable(gl.CULL_FACE)
gl.BindBuffer(gl.ARRAY_BUFFER, glRenderer.postEffectVbo)
setupUniforms(pe.shader)
vertAttrib := uint32(gl.GetAttribLocation(pe.program, gl.Str("vert\x00")))
gl.EnableVertexAttribArray(vertAttrib)
gl.VertexAttribPointer(vertAttrib, 2, gl.FLOAT, false, 4*4, gl.PtrOffset(0))
texCoordAttrib := uint32(gl.GetAttribLocation(pe.program, gl.Str("vertTexCoord\x00")))
gl.EnableVertexAttribArray(texCoordAttrib)
gl.VertexAttribPointer(texCoordAttrib, 2, gl.FLOAT, false, 4*4, gl.PtrOffset(2*4))
gl.DrawArrays(gl.TRIANGLE_STRIP, 0, 4)
gl.DisableVertexAttribArray(texCoordAttrib)
}
开发者ID:walesey,项目名称:go-engine,代码行数:19,代码来源:postEffects.go
示例10: Run
func Run() {
if err := glfw.Init(); err != nil {
glog.Fatalln("failed to initialize glfw", err)
}
defer glfw.Terminate()
setupWindowOptions()
window, err := glfw.CreateWindow(WindowWidth, WindowHeight, "Game", nil, nil)
if err != nil {
panic(err)
}
window.MakeContextCurrent()
//initilize Glow
if err := gl.Init(); err != nil {
panic(err)
}
version := gl.GoStr(gl.GetString(gl.VERSION))
fmt.Println("OpenGL version", version)
shaderSource, err := ReadShaders("colorShader")
if err != nil {
panic(err)
}
program, err := NewProgram(shaderSource)
if err != nil {
panic(err)
}
program.Use()
sprite := &SpriteComponent{-.5, -.5, 1, 1}
sprite.ReloadGraphics()
vertAttrib := uint32(gl.GetAttribLocation(program.program, CStr("vertPosition")))
gl.EnableVertexAttribArray(vertAttrib)
gl.VertexAttribPointer(vertAttrib, 3, gl.FLOAT, false, 0, gl.PtrOffset(0))
gl.Enable(gl.DEPTH_TEST)
gl.DepthFunc(gl.LESS)
gl.ClearColor(1.0, 1.0, 1.0, 1.0)
for !window.ShouldClose() {
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
program.Use()
gl.BindVertexArray(sprite.vaoID)
gl.DrawArrays(gl.TRIANGLES, 0, 2*3)
window.SwapBuffers()
glfw.PollEvents()
}
}
开发者ID:Dacode45,项目名称:gogogamengine,代码行数:54,代码来源:render_test.go
示例11: createVao
func createVao() uint32 {
var vbo = createVbo(getPoints())
var vao uint32
gl.GenVertexArrays(1, &vao)
gl.BindVertexArray(vao)
gl.EnableVertexAttribArray(0)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
gl.VertexAttribPointer(0, 3, gl.FLOAT, false, 0, nil)
return vao
}
开发者ID:depy,项目名称:examples,代码行数:11,代码来源:triangle.go
示例12: SetupVertexPointers
func (mat *Material) SetupVertexPointers() {
/* Enable vertex array attributes and set up vertex attribute pointers */
for _, desc := range mat.Buffers {
gl.EnableVertexAttribArray(desc.Buffer)
if desc.Integer {
gl.VertexAttribIPointer(
desc.Buffer,
desc.Count,
desc.DataType,
desc.Stride,
gl.PtrOffset(int(desc.Offset)))
} else {
gl.VertexAttribPointer(
desc.Buffer,
desc.Count,
desc.DataType,
desc.Normalize,
desc.Stride,
gl.PtrOffset(int(desc.Offset)))
}
}
}
开发者ID:johanhenriksson,项目名称:goworld,代码行数:22,代码来源:material.go
示例13: Loop
func (renderer *Renderer) Loop() {
defer glog.Flush()
if err := glfw.Init(); err != nil {
glog.Fatalln("GLFW failed to initialize:", err)
glog.Info("GLFW failed to init")
}
glfw.WindowHint(glfw.ContextVersionMajor, 3)
glfw.WindowHint(glfw.ContextVersionMinor, 2)
glfw.WindowHint(glfw.OpenGLForwardCompatible, glfw.True)
glfw.WindowHint(glfw.Resizable, glfw.False)
window, windowError := glfw.CreateWindow(800, 600, "OpenGL", nil, nil)
if windowError != nil {
glog.Info("oops")
panic(windowError)
}
glog.Info("Buffer")
defer func() {
window.Destroy()
glfw.Terminate()
glog.Info("ending")
renderer.ended = true
//system_end <- true
}()
window.MakeContextCurrent()
if err := gl.Init(); err != nil {
panic(err)
}
renderer.keyCallback = func(window *glfw.Window, key glfw.Key, scancode int, action glfw.Action, mods glfw.ModifierKey) {
glog.Infof("key: %v, scancode: %v, action: %v, mods: %v", key, scancode, action, mods)
}
window.SetKeyCallback(renderer.keyCallback)
//<-system_start
renderer.started = true
//system_started <- true
gl.ClearDepth(1.0)
var vboID uint32
gl.GenBuffers(1, &vboID)
var vertexData = []float32{
1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1,
}
gl.BindBuffer(gl.ARRAY_BUFFER, vboID)
gl.BufferData(gl.ARRAY_BUFFER, len(vertexData)*4, gl.Ptr(vertexData), gl.STATIC_DRAW)
gl.BindBuffer(gl.ARRAY_BUFFER, 0)
//get shaders
vertexShader, fragmentShader := getShaders()
program, err := newProgram(vertexShader, fragmentShader)
program.UseProgram()
if err != nil {
panic(err)
}
//bind attributes
// L:
for !window.ShouldClose() {
//renderer.drawGame(program)
gl.EnableVertexAttribArray(0)
gl.BindBuffer(gl.ARRAY_BUFFER, vboID)
gl.VertexAttribPointer(
0,
3,
gl.FLOAT,
false,
0,
gl.PtrOffset(0))
gl.DrawArrays(gl.TRIANGLES, 0, 3)
gl.DisableVertexAttribArray(0)
window.SwapBuffers()
glfw.PollEvents()
}
if vboID != 0 {
gl.DeleteBuffers(1, &vboID)
}
}
开发者ID:Dacode45,项目名称:gogogamengine,代码行数:90,代码来源:render_system.go
示例14: UseProgram
func (program *GLSLProgram) UseProgram() {
gl.UseProgram(program.program)
for i := uint32(0); i < program.numAttributes; i++ {
gl.EnableVertexAttribArray(i)
}
}
开发者ID:Dacode45,项目名称:gogogamengine,代码行数:6,代码来源:render_system.go
示例15: main
func main() {
if err := glfw.Init(); err != nil {
log.Fatalln("failed to initialize glfw:", err)
}
defer glfw.Terminate()
glfw.WindowHint(glfw.Resizable, glfw.False)
glfw.WindowHint(glfw.ContextVersionMajor, 4)
glfw.WindowHint(glfw.ContextVersionMinor, 1)
glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)
glfw.WindowHint(glfw.OpenGLForwardCompatible, glfw.True)
window, err := glfw.CreateWindow(windowWidth, windowHeight, "Cube", nil, nil)
if err != nil {
panic(err)
}
window.MakeContextCurrent()
// Initialize Glow
if err := gl.Init(); err != nil {
panic(err)
}
version := gl.GoStr(gl.GetString(gl.VERSION))
fmt.Println("OpenGL version", version)
// Configure the vertex and fragment shaders
program, err := newProgram(vertexShader, fragmentShader)
if err != nil {
panic(err)
}
gl.UseProgram(program)
projection := mgl32.Perspective(mgl32.DegToRad(45.0), float32(windowWidth)/windowHeight, 0.1, 10.0)
projectionUniform := gl.GetUniformLocation(program, gl.Str("projection\x00"))
gl.UniformMatrix4fv(projectionUniform, 1, false, &projection[0])
camera := mgl32.LookAtV(mgl32.Vec3{3, 3, 3}, mgl32.Vec3{0, 0, 0}, mgl32.Vec3{0, 1, 0})
cameraUniform := gl.GetUniformLocation(program, gl.Str("camera\x00"))
gl.UniformMatrix4fv(cameraUniform, 1, false, &camera[0])
model := mgl32.Ident4()
modelUniform := gl.GetUniformLocation(program, gl.Str("model\x00"))
gl.UniformMatrix4fv(modelUniform, 1, false, &model[0])
textureUniform := gl.GetUniformLocation(program, gl.Str("tex\x00"))
gl.Uniform1i(textureUniform, 0)
gl.BindFragDataLocation(program, 0, gl.Str("outputColor\x00"))
// Load the texture
texture, err := newTexture("square.png")
if err != nil {
panic(err)
}
// Configure the vertex data
var vao uint32
gl.GenVertexArrays(1, &vao)
gl.BindVertexArray(vao)
var vbo uint32
gl.GenBuffers(1, &vbo)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
gl.BufferData(gl.ARRAY_BUFFER, len(cubeVertices)*4, gl.Ptr(cubeVertices), gl.STATIC_DRAW)
vertAttrib := uint32(gl.GetAttribLocation(program, gl.Str("vert\x00")))
gl.EnableVertexAttribArray(vertAttrib)
gl.VertexAttribPointer(vertAttrib, 3, gl.FLOAT, false, 5*4, gl.PtrOffset(0))
texCoordAttrib := uint32(gl.GetAttribLocation(program, gl.Str("vertTexCoord\x00")))
gl.EnableVertexAttribArray(texCoordAttrib)
gl.VertexAttribPointer(texCoordAttrib, 2, gl.FLOAT, false, 5*4, gl.PtrOffset(3*4))
// Configure global settings
gl.Enable(gl.DEPTH_TEST)
gl.DepthFunc(gl.LESS)
gl.ClearColor(1.0, 1.0, 1.0, 1.0)
angle := 0.0
previousTime := glfw.GetTime()
for !window.ShouldClose() {
gl.Clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT)
// Update
time := glfw.GetTime()
elapsed := time - previousTime
previousTime = time
angle += elapsed
model = mgl32.HomogRotate3D(float32(angle), mgl32.Vec3{0, 1, 0})
// Render
gl.UseProgram(program)
gl.UniformMatrix4fv(modelUniform, 1, false, &model[0])
gl.BindVertexArray(vao)
//.........这里部分代码省略.........
开发者ID:depy,项目名称:examples,代码行数:101,代码来源:cube.go
示例16: create
func (sprite *Sprite) create(file string, width int, height int, frames int, framesPerLine int) error {
image, err := texture.New(file)
if err != nil {
return err
}
var vao uint32
gl.GenVertexArrays(1, &vao)
gl.BindVertexArray(vao)
var vbo uint32
gl.GenBuffers(1, &vbo)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
w := float32(width)
h := float32(height)
frameWidth := float32(width) / float32(image.Width)
frameHeight := float32(height) / float32(image.Height)
var spriteVertices []float32
if frames == 0 {
spriteVertices = []float32{
w, h, 0.0, 1.0, 1.0,
0.0, 0.0, 0.0, 0.0, 0.0,
0.0, h, 0.0, 0.0, 1.0,
w, h, 0.0, 1.0, 1.0,
0.0, 0.0, 0.0, 0.0, 0.0,
w, 0.0, 0.0, 1.0, 0.0,
}
} else {
for i := 0; i < frames; i++ {
frameX := float32(i%framesPerLine) * frameWidth
frameY := float32(i/framesPerLine) * frameHeight
frameW := frameWidth + frameX
frameH := frameHeight + frameY
spriteVertices = append(spriteVertices,
[]float32{
w, h, 0.0, frameW, frameH,
0.0, 0.0, 0.0, frameX, frameY,
0.0, h, 0.0, frameX, frameH,
w, h, 0.0, frameW, frameH,
0.0, 0.0, 0.0, frameX, frameY,
w, 0.0, 0.0, frameW, frameY,
}...)
}
}
gl.BufferData(gl.ARRAY_BUFFER, len(spriteVertices)*4, gl.Ptr(spriteVertices), gl.STATIC_DRAW)
vertAttrib := uint32(0)
gl.EnableVertexAttribArray(vertAttrib)
gl.VertexAttribPointer(vertAttrib, 3, gl.FLOAT, false, 5*4, gl.PtrOffset(0))
texCoordAttrib := uint32(1)
gl.EnableVertexAttribArray(texCoordAttrib)
gl.VertexAttribPointer(texCoordAttrib, 2, gl.FLOAT, false, 5*4, gl.PtrOffset(3*4))
sprite.vao = vao
sprite.image = image
return nil
}
开发者ID:anthonyrego,项目名称:gosmf,代码行数:68,代码来源:sprite.go
示例17: Bind
func (v *VBO) Bind() {
gl.BindVertexArray(v.vao)
gl.EnableVertexAttribArray(gPosition_attr)
gl.EnableVertexAttribArray(gUVs_attr)
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, v.vboIndices)
}
开发者ID:aubonbeurre,项目名称:goicmpgl,代码行数:6,代码来源:vbo.go
示例18: DrawGeometry
func (glRenderer *OpenglRenderer) DrawGeometry(geometry *renderer.Geometry, transform mgl32.Mat4) {
glRenderer.enableShader()
glRenderer.enableMaterial()
glRenderer.enableCubeMap()
if glRenderer.activeShader == nil {
panic("ERROR: No shader is configured.")
}
shader := glRenderer.activeShader
program := shader.Program
params := glRenderer.rendererParams
glRenderer.enableDepthTest(params.DepthTest)
glRenderer.enableDepthMask(params.DepthMask)
glRenderer.enableCullFace(params.CullBackface)
glRenderer.enableUnlit(params.Unlit)
glRenderer.setTransparency(params.Transparency)
// set buffers
gl.BindBuffer(gl.ARRAY_BUFFER, geometry.VboId)
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, geometry.IboId)
// update buffers
if geometry.VboDirty && len(geometry.Verticies) > 0 && len(geometry.Indicies) > 0 {
gl.BufferData(gl.ARRAY_BUFFER, len(geometry.Verticies)*4, gl.Ptr(geometry.Verticies), gl.DYNAMIC_DRAW)
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, len(geometry.Indicies)*4, gl.Ptr(geometry.Indicies), gl.DYNAMIC_DRAW)
geometry.VboDirty = false
}
// set uniforms
modelNormal := transform.Inv().Transpose()
shader.Uniforms["model"] = transform
shader.Uniforms["modelNormal"] = modelNormal
// set camera uniforms
cam := glRenderer.camera
win := glRenderer.WindowDimensions()
shader.Uniforms["cameraTranslation"] = cam.Translation
if cam.Ortho {
shader.Uniforms["projection"] = mgl32.Ortho2D(0, win.X(), win.Y(), 0)
shader.Uniforms["camera"] = mgl32.Ident4()
} else {
shader.Uniforms["projection"] = mgl32.Perspective(mgl32.DegToRad(cam.Angle), win.X()/win.Y(), cam.Near, cam.Far)
shader.Uniforms["camera"] = mgl32.LookAtV(cam.Translation, cam.Lookat, cam.Up)
}
shader.Uniforms["unlit"] = glRenderer.unlit
shader.Uniforms["useTextures"] = glRenderer.useTextures
shader.Uniforms["ambientLightValue"] = glRenderer.ambientLightValue
shader.Uniforms["nbPointLights"] = glRenderer.nbPointLights
shader.Uniforms["pointLightValues"] = glRenderer.pointLightValues
shader.Uniforms["pointLightPositions"] = glRenderer.pointLightPositions
shader.Uniforms["nbDirectionalLights"] = glRenderer.nbDirectionalLights
shader.Uniforms["directionalLightValues"] = glRenderer.directionalLightValues
shader.Uniforms["directionalLightVectors"] = glRenderer.directionalLightVectors
// set custom uniforms
setupUniforms(shader)
// set verticies attribute
vertAttrib := uint32(gl.GetAttribLocation(program, gl.Str("vert\x00")))
gl.EnableVertexAttribArray(vertAttrib)
gl.VertexAttribPointer(vertAttrib, 3, gl.FLOAT, false, renderer.VertexStride*4, gl.PtrOffset(0))
// set normals attribute
normAttrib := uint32(gl.GetAttribLocation(program, gl.Str("normal\x00")))
gl.EnableVertexAttribArray(normAttrib)
gl.VertexAttribPointer(normAttrib, 3, gl.FLOAT, false, renderer.VertexStride*4, gl.PtrOffset(3*4))
// set texture coord attribute
texCoordAttrib := uint32(gl.GetAttribLocation(program, gl.Str("texCoord\x00")))
gl.EnableVertexAttribArray(texCoordAttrib)
gl.VertexAttribPointer(texCoordAttrib, 2, gl.FLOAT, false, renderer.VertexStride*4, gl.PtrOffset(6*4))
// vertex color attribute
colorAttrib := uint32(gl.GetAttribLocation(program, gl.Str("color\x00")))
gl.EnableVertexAttribArray(colorAttrib)
gl.VertexAttribPointer(colorAttrib, 4, gl.FLOAT, false, renderer.VertexStride*4, gl.PtrOffset(8*4))
gl.DrawElements(gl.TRIANGLES, (int32)(len(geometry.Indicies)), gl.UNSIGNED_INT, gl.PtrOffset(0))
}
开发者ID:walesey,项目名称:go-engine,代码行数:82,代码来源:glRenderer.go
注:本文中的github.com/go-gl/gl/v4/1-core/gl.EnableVertexAttribArray函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论