本文整理汇总了Golang中github.com/go-gl/gl/v2/1/gl.Ptr函数的典型用法代码示例。如果您正苦于以下问题:Golang Ptr函数的具体用法?Golang Ptr怎么用?Golang Ptr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Ptr函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: resolveData
func resolveData(idata interface{}) (iData, error) {
var d iData
switch data := idata.(type) {
case []float32:
d.typ = gl.FLOAT
d.siz = 4
d.length = len(data)
d.ptr = gl.Ptr(data)
case []uint8:
d.typ = gl.UNSIGNED_BYTE
d.siz = 1
d.length = len(data)
d.ptr = gl.Ptr(data)
case []uint16:
d.typ = gl.UNSIGNED_SHORT
d.siz = 2
d.length = len(data)
d.ptr = gl.Ptr(data)
case []uint32:
d.typ = gl.UNSIGNED_INT
d.siz = 4
d.length = len(data)
d.ptr = gl.Ptr(data)
default:
return iData{}, fmt.Errorf("Unusable data type for buffer")
}
return d, nil
}
示例2: UniformFloats
func (c *Context) UniformFloats(p Program, location string, v []float32) {
l := int32(GetUniformLocation(c, p, location))
switch len(v) {
case 4:
gl.Uniform4fv(l, 1, (*float32)(gl.Ptr(v)))
case 16:
gl.UniformMatrix4fv(l, 1, false, (*float32)(gl.Ptr(v)))
default:
panic("not reach")
}
}
示例3: UniformFloats
func (c *Context) UniformFloats(p Program, location string, v []float32) {
_ = c.runOnContextThread(func() error {
l := int32(c.locationCache.GetUniformLocation(c, p, location))
switch len(v) {
case 4:
gl.Uniform4fv(l, 1, (*float32)(gl.Ptr(v)))
case 16:
gl.UniformMatrix4fv(l, 1, false, (*float32)(gl.Ptr(v)))
default:
panic("not reach")
}
return nil
})
}
示例4: addVertices
func (m *Mesh) addVertices(vertices []*Vertex, indices []int32, calcNormals bool) {
if calcNormals {
m.calcNormals(vertices, indices)
}
m.size = int32(len(indices))
fb := verticesAsFloats(vertices)
gl.BindBuffer(gl.ARRAY_BUFFER, m.vbo)
gl.BufferData(gl.ARRAY_BUFFER, len(fb)*4, gl.Ptr(fb), gl.STATIC_DRAW)
gl.BindBuffer(gl.ELEMENT_ARRAY_BUFFER, m.ibo)
gl.BufferData(gl.ELEMENT_ARRAY_BUFFER, len(indices)*4, gl.Ptr(indices), gl.STATIC_DRAW)
}
示例5: Flush
func (p *Painter) Flush() {
if len(p.vertices) != 0 {
gl.EnableClientState(gl.COLOR_ARRAY)
gl.EnableClientState(gl.VERTEX_ARRAY)
gl.ColorPointer(4, gl.UNSIGNED_BYTE, 0, gl.Ptr(p.colors))
gl.VertexPointer(2, gl.INT, 0, gl.Ptr(p.vertices))
// draw lines
gl.DrawArrays(gl.LINES, 0, int32(len(p.vertices)/2))
gl.DisableClientState(gl.VERTEX_ARRAY)
gl.DisableClientState(gl.COLOR_ARRAY)
p.vertices = p.vertices[0:0]
p.colors = p.colors[0:0]
}
}
示例6: NewShader
func (c *Context) NewShader(shaderType ShaderType, source string) (Shader, error) {
var shader Shader
if err := c.runOnContextThread(func() error {
s := gl.CreateShader(uint32(shaderType))
if s == 0 {
return fmt.Errorf("opengl: glCreateShader failed: shader type: %d", shaderType)
}
cSources, free := gl.Strs(source + "\x00")
gl.ShaderSource(uint32(s), 1, cSources, nil)
free()
gl.CompileShader(s)
var v int32
gl.GetShaderiv(s, gl.COMPILE_STATUS, &v)
if v == gl.FALSE {
log := []uint8{}
gl.GetShaderiv(uint32(s), gl.INFO_LOG_LENGTH, &v)
if v != 0 {
log = make([]uint8, int(v))
gl.GetShaderInfoLog(uint32(s), v, nil, (*uint8)(gl.Ptr(log)))
}
return fmt.Errorf("opengl: shader compile failed: %s", log)
}
shader = Shader(s)
return nil
}); err != nil {
return 0, err
}
return shader, nil
}
示例7: PrintSegment
// Shouldn't have tabs nor newlines
func (o *OpenGlStream) PrintSegment(s string) {
if s == "" {
return
}
if o.BackgroundColor != nil && o.BorderColor == nil {
gl.PushAttrib(gl.CURRENT_BIT)
gl.Color3dv((*float64)(&o.BackgroundColor[0]))
gl.PushMatrix()
gl.Translated(float64(o.pos[0]), float64(o.pos[1]), 0)
for range s {
gl.CallList(oFontBackground)
}
gl.PopMatrix()
gl.PopAttrib()
}
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_LOD_BIAS, float32(lodBias*0.01))
gl.Enable(gl.BLEND)
defer gl.Disable(gl.BLEND)
gl.Enable(gl.TEXTURE_2D)
defer gl.Disable(gl.TEXTURE_2D)
gl.PushMatrix()
gl.Translated(float64(o.pos[0]), float64(o.pos[1]), 0)
gl.ListBase(oFontBase + uint32(o.FontOptions)*96)
gl.CallLists(int32(len(s)), gl.UNSIGNED_BYTE, gl.Ptr(&[]byte(s)[0]))
gl.PopMatrix()
//CheckGLError()
}
示例8: TexImage2D
// TexImage2D writes a 2D texture image.
//
// http://www.khronos.org/opengles/sdk/docs/man3/html/glTexImage2D.xhtml
func TexImage2D(target Enum, level int, width, height int, format Enum, ty Enum, data []byte) {
p := unsafe.Pointer(nil)
if len(data) > 0 {
p = gl.Ptr(&data[0])
}
gl.TexImage2D(uint32(target), int32(level), int32(format), int32(width), int32(height), 0, uint32(format), uint32(ty), p)
}
示例9: initResources
func initResources() uint32 {
vs := CreateShader("triangle.v.glsl", gl.VERTEX_SHADER)
fs := CreateShader("triangle.f.glsl", gl.FRAGMENT_SHADER)
var linkOk int32
program := gl.CreateProgram()
gl.AttachShader(program, vs)
gl.AttachShader(program, fs)
gl.LinkProgram(program)
gl.GetProgramiv(program, gl.LINK_STATUS, &linkOk)
if linkOk == 0 {
log.Fatal("gl.LinkProgram")
}
gl.GenBuffers(1, &vboTriangle)
gl.BindBuffer(gl.ARRAY_BUFFER, vboTriangle)
gl.BufferData(gl.ARRAY_BUFFER, floatSize*len(triangleAttributes), gl.Ptr(triangleAttributes), gl.STATIC_DRAW)
attributeCoord2d = gl.GetAttribLocation(program, gl.Str("coord2d\x00"))
if attributeCoord2d == -1 {
log.Fatal("failed to bind attribute")
}
attributeVColor = gl.GetAttribLocation(program, gl.Str("v_color\x00"))
if attributeVColor == -1 {
log.Fatal("could not bind attribute v_color")
}
uniformFade = gl.GetUniformLocation(program, gl.Str("fade\x00"))
if uniformFade == -1 {
log.Fatal("could not bind uniform fade")
}
return program
}
示例10: newChipset
func newChipset(file string, tilesize int) chipset {
imgFile, err := os.Open(file)
if err != nil {
log.Fatalf("texture %q not found on disk: %v\n", file, err)
}
img, _, err := image.Decode(imgFile)
if err != nil {
panic(err)
}
rgba := image.NewRGBA(img.Bounds())
draw.Draw(rgba, rgba.Bounds(), img, image.ZP, draw.Src)
var texture uint32
gl.Enable(gl.TEXTURE_2D)
gl.GenTextures(1, &texture)
gl.BindTexture(gl.TEXTURE_2D, texture)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
gl.TexImage2D(
gl.TEXTURE_2D,
0, gl.RGBA,
int32(rgba.Rect.Size().X),
int32(rgba.Rect.Size().Y),
0,
gl.RGBA,
gl.UNSIGNED_BYTE,
gl.Ptr(rgba.Pix))
return chipset{width: rgba.Bounds().Dx(), height: rgba.Bounds().Dy(), handle: texture, tilesize: tilesize}
}
示例11: loadTexture
func loadTexture(fileName string) (uint32, error) {
imgFile, err := os.Open("./res/textures/" + fileName)
if err != nil {
return 0, err
}
imgCfg, _, err := image.DecodeConfig(imgFile)
if err != nil {
return 0, err
}
_, err = imgFile.Seek(0, 0)
if err != nil {
return 0, err
}
w, h := int32(imgCfg.Width), int32(imgCfg.Height)
img, _, err := image.Decode(imgFile)
if err != nil {
return 0, err
}
buffer := make([]byte, w*h*4)
index := 0
for y := 0; y < int(h); y++ {
for x := 0; x < int(w); x++ {
pixel := img.At(x, y).(color.NRGBA)
buffer[index] = pixel.R
buffer[index+1] = pixel.G
buffer[index+2] = pixel.B
buffer[index+3] = pixel.A
index += 4
}
}
var texture uint32
gl.GenTextures(1, &texture)
gl.BindTexture(gl.TEXTURE_2D, texture)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
gl.TexImage2D(
gl.TEXTURE_2D,
0,
gl.RGBA8,
w,
h,
0,
gl.RGBA,
gl.UNSIGNED_BYTE,
gl.Ptr(buffer))
return texture, nil
}
示例12: initGL
func (v *Video) initGL() {
if err := gl.Init(); err != nil {
panic(err)
}
gl.Enable(gl.CULL_FACE)
gl.Enable(gl.DEPTH_TEST)
gl.ClearColor(0.0, 0.0, 0.0, 1.0)
v.prog = createProgram(vertShaderSrcDef, fragShaderSrcDef)
posAttrib := uint32(gl.GetAttribLocation(v.prog, gl.Str("vPosition"+"\x00")))
texCoordAttr := uint32(gl.GetAttribLocation(v.prog, gl.Str("vTexCoord"+"\x00")))
v.textureUni = gl.GetAttribLocation(v.prog, gl.Str("texture"+"\x00"))
var texture uint32
gl.GenTextures(1, &texture)
gl.ActiveTexture(gl.TEXTURE0)
gl.BindTexture(gl.TEXTURE_2D, texture)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
gl.TexParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
gl.UseProgram(v.prog)
gl.EnableVertexAttribArray(posAttrib)
gl.EnableVertexAttribArray(texCoordAttr)
//posAttrib.EnableArray()
//texCoordAttr.EnableArray()
var vbo uint32
gl.GenBuffers(1, &vbo)
gl.BindBuffer(gl.ARRAY_BUFFER, vbo)
verts := []float32{-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, len(verts)*int(unsafe.Sizeof(verts[0])), gl.Ptr(verts), gl.STATIC_DRAW)
var textCoorBuf uint32
gl.GenBuffers(1, &textCoorBuf)
gl.BindBuffer(gl.ARRAY_BUFFER, textCoorBuf)
texVerts := []float32{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, len(texVerts)*int(unsafe.Sizeof(texVerts[0])), gl.Ptr(texVerts), gl.STATIC_DRAW)
gl.VertexAttribPointer(posAttrib, 2, gl.FLOAT, false, 0, gl.PtrOffset(0))
gl.VertexAttribPointer(texCoordAttr, 2, gl.FLOAT, false, 0, gl.PtrOffset(0))
//posAttrib.AttribPointer(2, gl.FLOAT, false, 0, uintptr(0))
//texCoordAttr.AttribPointer(2, gl.FLOAT, false, 0, uintptr(0))
}
示例13: GetShaderInfoLog
// GetShaderInfoLog is a method you can call to get the compilation logs of a shader
func (c *Context) GetShaderInfoLog(shader *Shader) string {
var maxLength int32
gl.GetShaderiv(shader.uint32, gl.INFO_LOG_LENGTH, &maxLength)
errorLog := make([]byte, maxLength)
gl.GetShaderInfoLog(shader.uint32, maxLength, &maxLength, (*uint8)(gl.Ptr(errorLog)))
return string(errorLog)
}
示例14: NewRenderable
func NewRenderable(verts []float32) *Renderable {
r := &Renderable{
VboPosition: G.Renderer.NewVboPosition(verts),
Length: len(verts),
}
gl.BindBuffer(gl.ARRAY_BUFFER, r.VboPosition.Vbo.Id)
gl.BufferSubData(gl.ARRAY_BUFFER, int(r.VboPosition.Index*4), len(verts)*4, gl.Ptr(verts))
return r
}
示例15: NewVbo
func NewVbo(length int) *Vbo {
v := &Vbo{
Vertices: make([]float32, length),
}
gl.GenBuffers(1, &v.Id)
gl.BindBuffer(gl.ARRAY_BUFFER, v.Id)
gl.BufferData(gl.ARRAY_BUFFER, length*FloatSize, gl.Ptr(v.Vertices), gl.STATIC_DRAW)
return v
}