changed openglinterface a bit to be less specific to the go-gl implementation

This commit is contained in:
Thomas Friedel 2018-05-10 13:08:30 +02:00
parent 7042a59cdb
commit 06267645f6
8 changed files with 604 additions and 697 deletions

View file

@ -1,6 +1,7 @@
package goglimpl package goglimpl
import ( import (
"strings"
"unsafe" "unsafe"
"github.com/go-gl/gl/v3.2-core/gl" "github.com/go-gl/gl/v3.2-core/gl"
@ -14,15 +15,6 @@ var _ canvas.GL = GLImpl{}
func (_ GLImpl) Ptr(data interface{}) unsafe.Pointer { func (_ GLImpl) Ptr(data interface{}) unsafe.Pointer {
return gl.Ptr(data) return gl.Ptr(data)
} }
func (_ GLImpl) PtrOffset(offset int) unsafe.Pointer {
return gl.PtrOffset(offset)
}
func (_ GLImpl) Str(str string) *uint8 {
return gl.Str(str)
}
func (_ GLImpl) Strs(strs ...string) (cstrs **uint8, free func()) {
return gl.Strs(strs...)
}
func (_ GLImpl) ActiveTexture(texture uint32) { func (_ GLImpl) ActiveTexture(texture uint32) {
gl.ActiveTexture(texture) gl.ActiveTexture(texture)
} }
@ -83,26 +75,30 @@ func (_ GLImpl) GenTextures(n int32, textures *uint32) {
func (_ GLImpl) GenerateMipmap(target uint32) { func (_ GLImpl) GenerateMipmap(target uint32) {
gl.GenerateMipmap(target) gl.GenerateMipmap(target)
} }
func (_ GLImpl) GetAttribLocation(program uint32, name *uint8) int32 { func (_ GLImpl) GetAttribLocation(program uint32, name string) int32 {
return gl.GetAttribLocation(program, name) return gl.GetAttribLocation(program, gl.Str(name+"\x00"))
} }
func (_ GLImpl) GetError() uint32 { func (_ GLImpl) GetError() uint32 {
return gl.GetError() return gl.GetError()
} }
func (_ GLImpl) GetProgramInfoLog(program uint32, bufSize int32, length *int32, infoLog *uint8) { func (_ GLImpl) GetProgramInfoLog(program uint32, bufSize int32) string {
gl.GetProgramInfoLog(program, bufSize, length, infoLog) log := strings.Repeat("\x00", int(bufSize+1))
gl.GetProgramInfoLog(program, bufSize, nil, gl.Str(log))
return log
} }
func (_ GLImpl) GetProgramiv(program uint32, pname uint32, params *int32) { func (_ GLImpl) GetProgramiv(program uint32, pname uint32, params *int32) {
gl.GetProgramiv(program, pname, params) gl.GetProgramiv(program, pname, params)
} }
func (_ GLImpl) GetShaderInfoLog(shader uint32, bufSize int32, length *int32, infoLog *uint8) { func (_ GLImpl) GetShaderInfoLog(program uint32, bufSize int32) string {
gl.GetShaderInfoLog(shader, bufSize, length, infoLog) log := strings.Repeat("\x00", int(bufSize+1))
gl.GetShaderInfoLog(program, bufSize, nil, gl.Str(log))
return log
} }
func (_ GLImpl) GetShaderiv(shader uint32, pname uint32, params *int32) { func (_ GLImpl) GetShaderiv(shader uint32, pname uint32, params *int32) {
gl.GetShaderiv(shader, pname, params) gl.GetShaderiv(shader, pname, params)
} }
func (_ GLImpl) GetUniformLocation(program uint32, name *uint8) int32 { func (_ GLImpl) GetUniformLocation(program uint32, name string) int32 {
return gl.GetUniformLocation(program, name) return gl.GetUniformLocation(program, gl.Str(name+"\x00"))
} }
func (_ GLImpl) LinkProgram(program uint32) { func (_ GLImpl) LinkProgram(program uint32) {
gl.LinkProgram(program) gl.LinkProgram(program)
@ -113,8 +109,10 @@ func (_ GLImpl) ReadPixels(x int32, y int32, width int32, height int32, format u
func (_ GLImpl) Scissor(x int32, y int32, width int32, height int32) { func (_ GLImpl) Scissor(x int32, y int32, width int32, height int32) {
gl.Scissor(x, y, width, height) gl.Scissor(x, y, width, height)
} }
func (_ GLImpl) ShaderSource(shader uint32, count int32, xstring **uint8, length *int32) { func (_ GLImpl) ShaderSource(shader uint32, source string) {
gl.ShaderSource(shader, count, xstring, length) csource, freeFunc := gl.Strs(source + "\x00")
gl.ShaderSource(shader, 1, csource, nil)
freeFunc()
} }
func (_ GLImpl) StencilFunc(xfunc uint32, ref int32, mask uint32) { func (_ GLImpl) StencilFunc(xfunc uint32, ref int32, mask uint32) {
gl.StencilFunc(xfunc, ref, mask) gl.StencilFunc(xfunc, ref, mask)
@ -155,8 +153,8 @@ func (_ GLImpl) UniformMatrix3fv(location int32, count int32, transpose bool, va
func (_ GLImpl) UseProgram(program uint32) { func (_ GLImpl) UseProgram(program uint32) {
gl.UseProgram(program) gl.UseProgram(program)
} }
func (_ GLImpl) VertexAttribPointer(index uint32, size int32, xtype uint32, normalized bool, stride int32, pointer unsafe.Pointer) { func (_ GLImpl) VertexAttribPointer(index uint32, size int32, xtype uint32, normalized bool, stride int32, offset uint32) {
gl.VertexAttribPointer(index, size, xtype, normalized, stride, pointer) gl.VertexAttribPointer(index, size, xtype, normalized, stride, gl.PtrOffset(int(offset)))
} }
func (_ GLImpl) Viewport(x int32, y int32, width int32, height int32) { func (_ GLImpl) Viewport(x int32, y int32, width int32, height int32) {
gl.Viewport(x, y, width, height) gl.Viewport(x, y, width, height)

View file

@ -86,8 +86,8 @@ func (cv *Canvas) PutImageData(img *image.RGBA, x, y int) {
gli.Uniform1i(ir.image, 0) gli.Uniform1i(ir.image, 0)
gli.Uniform2f(ir.canvasSize, float32(cv.fw), float32(cv.fh)) gli.Uniform2f(ir.canvasSize, float32(cv.fw), float32(cv.fh))
gli.Uniform1f(ir.globalAlpha, 1) gli.Uniform1f(ir.globalAlpha, 1)
gli.VertexAttribPointer(ir.vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(ir.vertex, 2, gl_FLOAT, false, 0, 0)
gli.VertexAttribPointer(ir.texCoord, 2, gl_FLOAT, false, 0, gli.PtrOffset(8*4)) gli.VertexAttribPointer(ir.texCoord, 2, gl_FLOAT, false, 0, 8*4)
gli.EnableVertexAttribArray(ir.vertex) gli.EnableVertexAttribArray(ir.vertex)
gli.EnableVertexAttribArray(ir.texCoord) gli.EnableVertexAttribArray(ir.texCoord)
gli.DrawArrays(gl_TRIANGLE_FAN, 0, 4) gli.DrawArrays(gl_TRIANGLE_FAN, 0, 4)

View file

@ -263,8 +263,8 @@ func (cv *Canvas) DrawImage(image interface{}, coords ...float64) {
gli.Uniform1i(ir.image, 0) gli.Uniform1i(ir.image, 0)
gli.Uniform2f(ir.canvasSize, float32(cv.fw), float32(cv.fh)) gli.Uniform2f(ir.canvasSize, float32(cv.fw), float32(cv.fh))
gli.Uniform1f(ir.globalAlpha, float32(cv.state.globalAlpha)) gli.Uniform1f(ir.globalAlpha, float32(cv.state.globalAlpha))
gli.VertexAttribPointer(ir.vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(ir.vertex, 2, gl_FLOAT, false, 0, 0)
gli.VertexAttribPointer(ir.texCoord, 2, gl_FLOAT, false, 0, gli.PtrOffset(8*4)) gli.VertexAttribPointer(ir.texCoord, 2, gl_FLOAT, false, 0, 8*4)
gli.EnableVertexAttribArray(ir.vertex) gli.EnableVertexAttribArray(ir.vertex)
gli.EnableVertexAttribArray(ir.texCoord) gli.EnableVertexAttribArray(ir.texCoord)
gli.DrawArrays(gl_TRIANGLE_FAN, 0, 4) gli.DrawArrays(gl_TRIANGLE_FAN, 0, 4)

File diff suppressed because it is too large Load diff

View file

@ -200,18 +200,14 @@ func shaderGetTopLevelLines(source string) []string {
const compilePart = ` const compilePart = `
{ {
csource, freeFunc := gli.Strs(SHADER_SRC + "\x00")
defer freeFunc()
SHADER_VAR = gli.CreateShader(gl_SHADER_TYPE) SHADER_VAR = gli.CreateShader(gl_SHADER_TYPE)
gli.ShaderSource(SHADER_VAR, 1, csource, nil) gli.ShaderSource(SHADER_VAR, SHADER_SRC)
gli.CompileShader(SHADER_VAR) gli.CompileShader(SHADER_VAR)
var logLength int32 var logLength int32
gli.GetShaderiv(SHADER_VAR, gl_INFO_LOG_LENGTH, &logLength) gli.GetShaderiv(SHADER_VAR, gl_INFO_LOG_LENGTH, &logLength)
if logLength > 0 { if logLength > 0 {
shLog := strings.Repeat("\x00", int(logLength+1)) shLog := gli.GetShaderInfoLog(SHADER_VAR, logLength)
gli.GetShaderInfoLog(SHADER_VAR, logLength, nil, gli.Str(shLog))
fmt.Printf("SHADER_TYPE compilation log for SHADER_SRC:\n\n%s\n", shLog) fmt.Printf("SHADER_TYPE compilation log for SHADER_SRC:\n\n%s\n", shLog)
} }
@ -236,8 +232,7 @@ const linkPart = `
var logLength int32 var logLength int32
gli.GetProgramiv(program, gl_INFO_LOG_LENGTH, &logLength) gli.GetProgramiv(program, gl_INFO_LOG_LENGTH, &logLength)
if logLength > 0 { if logLength > 0 {
shLog := strings.Repeat("\x00", int(logLength+1)) shLog := gli.GetProgramInfoLog(program, logLength)
gli.GetProgramInfoLog(program, logLength, nil, gli.Str(shLog))
fmt.Printf("Shader link log for SHADER_SRC:\n\n%s\n", shLog) fmt.Printf("Shader link log for SHADER_SRC:\n\n%s\n", shLog)
} }
@ -263,7 +258,6 @@ func buildCodeHeader(buf *bytes.Buffer) {
fmt.Fprint(buf, "import (\n") fmt.Fprint(buf, "import (\n")
fmt.Fprint(buf, "\t\"errors\"\n") fmt.Fprint(buf, "\t\"errors\"\n")
fmt.Fprint(buf, "\t\"fmt\"\n") fmt.Fprint(buf, "\t\"fmt\"\n")
fmt.Fprint(buf, "\t\"strings\"\n")
fmt.Fprint(buf, ")\n\n") fmt.Fprint(buf, ")\n\n")
} }
@ -306,9 +300,9 @@ func buildCode(buf *bytes.Buffer, baseName string, inputs []ShaderInput) {
for _, input := range inputs { for _, input := range inputs {
if input.IsAttrib { if input.IsAttrib {
fmt.Fprintf(buf, "\tresult.%s = uint32(gli.GetAttribLocation(program, gli.Str(\"%s\\x00\")))\n", input.Name, input.Name) fmt.Fprintf(buf, "\tresult.%s = uint32(gli.GetAttribLocation(program, \"%s\"))\n", input.Name, input.Name)
} else if input.IsUniform { } else if input.IsUniform {
fmt.Fprintf(buf, "\tresult.%s = gli.GetUniformLocation(program, gli.Str(\"%s\\x00\"))\n", input.Name, input.Name) fmt.Fprintf(buf, "\tresult.%s = gli.GetUniformLocation(program, \"%s\")\n", input.Name, input.Name)
} }
} }

View file

@ -794,9 +794,6 @@ const (
// this interface based on Go-GL v3.2 // this interface based on Go-GL v3.2
type GL interface { type GL interface {
Ptr(data interface{}) unsafe.Pointer Ptr(data interface{}) unsafe.Pointer
PtrOffset(offset int) unsafe.Pointer
Str(str string) *uint8
Strs(strs ...string) (cstrs **uint8, free func())
ActiveTexture(texture uint32) ActiveTexture(texture uint32)
AttachShader(program uint32, shader uint32) AttachShader(program uint32, shader uint32)
BindBuffer(target uint32, buffer uint32) BindBuffer(target uint32, buffer uint32)
@ -817,17 +814,17 @@ type GL interface {
GenBuffers(n int32, buffers *uint32) GenBuffers(n int32, buffers *uint32)
GenTextures(n int32, textures *uint32) GenTextures(n int32, textures *uint32)
GenerateMipmap(target uint32) GenerateMipmap(target uint32)
GetAttribLocation(program uint32, name *uint8) int32 GetAttribLocation(program uint32, name string) int32
GetError() uint32 GetError() uint32
GetProgramInfoLog(program uint32, bufSize int32, length *int32, infoLog *uint8) GetProgramInfoLog(program uint32, bufSize int32) string
GetProgramiv(program uint32, pname uint32, params *int32) GetProgramiv(program uint32, pname uint32, params *int32)
GetShaderInfoLog(shader uint32, bufSize int32, length *int32, infoLog *uint8) GetShaderInfoLog(shader uint32, bufSize int32) string
GetShaderiv(shader uint32, pname uint32, params *int32) GetShaderiv(shader uint32, pname uint32, params *int32)
GetUniformLocation(program uint32, name *uint8) int32 GetUniformLocation(program uint32, name string) int32
LinkProgram(program uint32) LinkProgram(program uint32)
ReadPixels(x int32, y int32, width int32, height int32, format uint32, xtype uint32, pixels unsafe.Pointer) ReadPixels(x int32, y int32, width int32, height int32, format uint32, xtype uint32, pixels unsafe.Pointer)
Scissor(x int32, y int32, width int32, height int32) Scissor(x int32, y int32, width int32, height int32)
ShaderSource(shader uint32, count int32, xstring **uint8, length *int32) ShaderSource(shader uint32, source string)
StencilFunc(xfunc uint32, ref int32, mask uint32) StencilFunc(xfunc uint32, ref int32, mask uint32)
StencilMask(mask uint32) StencilMask(mask uint32)
StencilOp(fail uint32, zfail uint32, zpass uint32) StencilOp(fail uint32, zfail uint32, zpass uint32)
@ -841,6 +838,6 @@ type GL interface {
Uniform4f(location int32, v0 float32, v1 float32, v2 float32, v3 float32) Uniform4f(location int32, v0 float32, v1 float32, v2 float32, v3 float32)
UniformMatrix3fv(location int32, count int32, transpose bool, value *float32) UniformMatrix3fv(location int32, count int32, transpose bool, value *float32)
UseProgram(program uint32) UseProgram(program uint32)
VertexAttribPointer(index uint32, size int32, xtype uint32, normalized bool, stride int32, pointer unsafe.Pointer) VertexAttribPointer(index uint32, size int32, xtype uint32, normalized bool, stride int32, offset uint32)
Viewport(x int32, y int32, width int32, height int32) Viewport(x int32, y int32, width int32, height int32)
} }

View file

@ -370,7 +370,7 @@ func (cv *Canvas) stroke(path []pathPoint) {
gli.Uniform2f(sr.canvasSize, float32(cv.fw), float32(cv.fh)) gli.Uniform2f(sr.canvasSize, float32(cv.fw), float32(cv.fh))
gli.EnableVertexAttribArray(sr.vertex) gli.EnableVertexAttribArray(sr.vertex)
gli.VertexAttribPointer(sr.vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(sr.vertex, 2, gl_FLOAT, false, 0, 0)
gli.DrawArrays(gl_TRIANGLES, 6, int32(len(tris)/2-6)) gli.DrawArrays(gl_TRIANGLES, 6, int32(len(tris)/2-6))
gli.DisableVertexAttribArray(sr.vertex) gli.DisableVertexAttribArray(sr.vertex)
@ -380,7 +380,7 @@ func (cv *Canvas) stroke(path []pathPoint) {
vertex := cv.useShader(&cv.state.stroke) vertex := cv.useShader(&cv.state.stroke)
gli.EnableVertexAttribArray(vertex) gli.EnableVertexAttribArray(vertex)
gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, 0)
gli.DrawArrays(gl_TRIANGLES, 0, 6) gli.DrawArrays(gl_TRIANGLES, 0, 6)
gli.DisableVertexAttribArray(vertex) gli.DisableVertexAttribArray(vertex)
@ -517,7 +517,7 @@ func (cv *Canvas) Fill() {
gli.Uniform2f(sr.canvasSize, float32(cv.fw), float32(cv.fh)) gli.Uniform2f(sr.canvasSize, float32(cv.fw), float32(cv.fh))
gli.EnableVertexAttribArray(sr.vertex) gli.EnableVertexAttribArray(sr.vertex)
gli.VertexAttribPointer(sr.vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(sr.vertex, 2, gl_FLOAT, false, 0, 0)
gli.DrawArrays(gl_TRIANGLES, 6, int32(len(tris)/2-6)) gli.DrawArrays(gl_TRIANGLES, 6, int32(len(tris)/2-6))
gli.DisableVertexAttribArray(sr.vertex) gli.DisableVertexAttribArray(sr.vertex)
@ -527,7 +527,7 @@ func (cv *Canvas) Fill() {
vertex := cv.useShader(&cv.state.fill) vertex := cv.useShader(&cv.state.fill)
gli.EnableVertexAttribArray(vertex) gli.EnableVertexAttribArray(vertex)
gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, 0)
gli.DrawArrays(gl_TRIANGLES, 0, 6) gli.DrawArrays(gl_TRIANGLES, 0, 6)
gli.DisableVertexAttribArray(vertex) gli.DisableVertexAttribArray(vertex)
@ -594,7 +594,7 @@ func (cv *Canvas) clip(path []pathPoint) {
gli.BindBuffer(gl_ARRAY_BUFFER, buf) gli.BindBuffer(gl_ARRAY_BUFFER, buf)
gli.BufferData(gl_ARRAY_BUFFER, len(tris)*4, unsafe.Pointer(&tris[0]), gl_STREAM_DRAW) gli.BufferData(gl_ARRAY_BUFFER, len(tris)*4, unsafe.Pointer(&tris[0]), gl_STREAM_DRAW)
gli.VertexAttribPointer(sr.vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(sr.vertex, 2, gl_FLOAT, false, 0, 0)
gli.UseProgram(sr.id) gli.UseProgram(sr.id)
gli.Uniform4f(sr.color, 1, 1, 1, 1) gli.Uniform4f(sr.color, 1, 1, 1, 1)
@ -701,7 +701,7 @@ func (cv *Canvas) FillRect(x, y, w, h float64) {
gli.StencilFunc(gl_EQUAL, 0, 0xFF) gli.StencilFunc(gl_EQUAL, 0, 0xFF)
vertex := cv.useShader(&cv.state.fill) vertex := cv.useShader(&cv.state.fill)
gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, 0)
gli.EnableVertexAttribArray(vertex) gli.EnableVertexAttribArray(vertex)
gli.DrawArrays(gl_TRIANGLE_FAN, 0, 4) gli.DrawArrays(gl_TRIANGLE_FAN, 0, 4)
gli.DisableVertexAttribArray(vertex) gli.DisableVertexAttribArray(vertex)

View file

@ -215,8 +215,8 @@ func (cv *Canvas) FillText(str string, x, y float64) {
0, 1, 0, float32(1 - th), float32(tw), float32(1 - th), float32(tw), 1} 0, 1, 0, float32(1 - th), float32(tw), float32(1 - th), float32(tw), 1}
gli.BufferData(gl_ARRAY_BUFFER, len(data)*4, unsafe.Pointer(&data[0]), gl_STREAM_DRAW) gli.BufferData(gl_ARRAY_BUFFER, len(data)*4, unsafe.Pointer(&data[0]), gl_STREAM_DRAW)
gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, nil) gli.VertexAttribPointer(vertex, 2, gl_FLOAT, false, 0, 0)
gli.VertexAttribPointer(alphaTexCoord, 2, gl_FLOAT, false, 0, gli.PtrOffset(8*4)) gli.VertexAttribPointer(alphaTexCoord, 2, gl_FLOAT, false, 0, 8*4)
gli.DrawArrays(gl_TRIANGLE_FAN, 0, 4) gli.DrawArrays(gl_TRIANGLE_FAN, 0, 4)
for y := 0; y < strHeight; y++ { for y := 0; y < strHeight; y++ {