diff --git a/internal/graphicsdriver/opengl/context_notjs.go b/internal/graphicsdriver/opengl/context_notjs.go index 8a3451105..10e37ce70 100644 --- a/internal/graphicsdriver/opengl/context_notjs.go +++ b/internal/graphicsdriver/opengl/context_notjs.go @@ -288,9 +288,7 @@ func (c *context) newShader(shaderType uint32, source string) (shader, error) { c.ctx.ShaderSource(s, source) c.ctx.CompileShader(s) - v := make([]int32, 1) - c.ctx.GetShaderiv(v, s, gl.COMPILE_STATUS) - if v[0] == gl.FALSE { + if c.ctx.GetShaderi(s, gl.COMPILE_STATUS) == gl.FALSE { log := c.ctx.GetShaderInfoLog(s) return 0, fmt.Errorf("opengl: shader compile failed: %s", log) } @@ -316,9 +314,7 @@ func (c *context) newProgram(shaders []shader, attributes []string) (program, er } c.ctx.LinkProgram(p) - v := make([]int32, 1) - c.ctx.GetProgramiv(v, p, gl.LINK_STATUS) - if v[0] == gl.FALSE { + if c.ctx.GetProgrami(p, gl.LINK_STATUS) == gl.FALSE { info := c.ctx.GetProgramInfoLog(p) return 0, fmt.Errorf("opengl: program error: %s", info) } diff --git a/internal/graphicsdriver/opengl/gl/default_notpurego.go b/internal/graphicsdriver/opengl/gl/default_notpurego.go index 70ae3bd85..cc63f4cc9 100644 --- a/internal/graphicsdriver/opengl/gl/default_notpurego.go +++ b/internal/graphicsdriver/opengl/gl/default_notpurego.go @@ -585,33 +585,35 @@ func (c *defaultContext) GetError() uint32 { } func (c *defaultContext) GetInteger(pname uint32) int { - dst := make([]int32, 1) - C.glowGetIntegerv(c.gpGetIntegerv, (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(&dst[0]))) - return int(dst[0]) + var dst int32 + C.glowGetIntegerv(c.gpGetIntegerv, (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(&dst))) + return int(dst) } func (c *defaultContext) GetProgramInfoLog(program uint32) string { - var bufSize [1]int32 - c.GetProgramiv(bufSize[:], program, INFO_LOG_LENGTH) - infoLog := make([]byte, bufSize[0]) - C.glowGetProgramInfoLog(c.gpGetProgramInfoLog, (C.GLuint)(program), (C.GLsizei)(bufSize[0]), nil, (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) + bufSize := c.GetProgrami(program, INFO_LOG_LENGTH) + infoLog := make([]byte, bufSize) + C.glowGetProgramInfoLog(c.gpGetProgramInfoLog, (C.GLuint)(program), (C.GLsizei)(bufSize), nil, (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) return string(infoLog) } -func (c *defaultContext) GetProgramiv(dst []int32, program uint32, pname uint32) { - C.glowGetProgramiv(c.gpGetProgramiv, (C.GLuint)(program), (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(&dst[0]))) +func (c *defaultContext) GetProgrami(program uint32, pname uint32) int { + var dst int32 + C.glowGetProgramiv(c.gpGetProgramiv, (C.GLuint)(program), (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(&dst))) + return int(dst) } func (c *defaultContext) GetShaderInfoLog(shader uint32) string { - var bufSize [1]int32 - c.GetShaderiv(bufSize[:], shader, INFO_LOG_LENGTH) - infoLog := make([]byte, bufSize[0]) - C.glowGetShaderInfoLog(c.gpGetShaderInfoLog, (C.GLuint)(shader), (C.GLsizei)(bufSize[0]), nil, (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) + bufSize := c.GetShaderi(shader, INFO_LOG_LENGTH) + infoLog := make([]byte, bufSize) + C.glowGetShaderInfoLog(c.gpGetShaderInfoLog, (C.GLuint)(shader), (C.GLsizei)(bufSize), nil, (*C.GLchar)(unsafe.Pointer(&infoLog[0]))) return string(infoLog) } -func (c *defaultContext) GetShaderiv(dst []int32, shader uint32, pname uint32) { - C.glowGetShaderiv(c.gpGetShaderiv, (C.GLuint)(shader), (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(&dst[0]))) +func (c *defaultContext) GetShaderi(shader uint32, pname uint32) int { + var dst int32 + C.glowGetShaderiv(c.gpGetShaderiv, (C.GLuint)(shader), (C.GLenum)(pname), (*C.GLint)(unsafe.Pointer(&dst))) + return int(dst) } func (c *defaultContext) GetUniformLocation(program uint32, name string) int32 { diff --git a/internal/graphicsdriver/opengl/gl/default_purego.go b/internal/graphicsdriver/opengl/gl/default_purego.go index 7893d524e..47a3cbc97 100644 --- a/internal/graphicsdriver/opengl/gl/default_purego.go +++ b/internal/graphicsdriver/opengl/gl/default_purego.go @@ -284,33 +284,35 @@ func (c *defaultContext) GetError() uint32 { } func (c *defaultContext) GetInteger(pname uint32) int { - dst := make([]int32, 1) - purego.SyscallN(c.gpGetIntegerv, uintptr(pname), uintptr(unsafe.Pointer(&dst[0]))) - return int(dst[0]) + var dst int32 + purego.SyscallN(c.gpGetIntegerv, uintptr(pname), uintptr(unsafe.Pointer(&dst))) + return int(dst) } func (c *defaultContext) GetProgramInfoLog(program uint32) string { - var bufSize [1]int32 - c.GetProgramiv(bufSize[:], program, INFO_LOG_LENGTH) - infoLog := make([]byte, bufSize[0]) - purego.SyscallN(c.gpGetProgramInfoLog, uintptr(program), uintptr(bufSize[0]), 0, uintptr(unsafe.Pointer(&infoLog[0]))) + bufSize := c.GetProgrami(program, INFO_LOG_LENGTH) + infoLog := make([]byte, bufSize) + purego.SyscallN(c.gpGetProgramInfoLog, uintptr(program), uintptr(bufSize), 0, uintptr(unsafe.Pointer(&infoLog[0]))) return string(infoLog) } -func (c *defaultContext) GetProgramiv(dst []int32, program uint32, pname uint32) { - purego.SyscallN(c.gpGetProgramiv, uintptr(program), uintptr(pname), uintptr(unsafe.Pointer(&dst[0]))) +func (c *defaultContext) GetProgrami(program uint32, pname uint32) int { + var dst int32 + purego.SyscallN(c.gpGetProgramiv, uintptr(program), uintptr(pname), uintptr(unsafe.Pointer(&dst))) + return int(dst) } func (c *defaultContext) GetShaderInfoLog(shader uint32) string { - var bufSize [1]int32 - c.GetShaderiv(bufSize[:], shader, INFO_LOG_LENGTH) - infoLog := make([]byte, bufSize[0]) - purego.SyscallN(c.gpGetShaderInfoLog, uintptr(shader), uintptr(bufSize[0]), 0, uintptr(unsafe.Pointer(&infoLog[0]))) + bufSize := c.GetShaderi(shader, INFO_LOG_LENGTH) + infoLog := make([]byte, bufSize) + purego.SyscallN(c.gpGetShaderInfoLog, uintptr(shader), uintptr(bufSize), 0, uintptr(unsafe.Pointer(&infoLog[0]))) return string(infoLog) } -func (c *defaultContext) GetShaderiv(dst []int32, shader uint32, pname uint32) { - purego.SyscallN(c.gpGetShaderiv, uintptr(shader), uintptr(pname), uintptr(unsafe.Pointer(&dst[0]))) +func (c *defaultContext) GetShaderi(shader uint32, pname uint32) int { + var dst int32 + purego.SyscallN(c.gpGetShaderiv, uintptr(shader), uintptr(pname), uintptr(unsafe.Pointer(&dst))) + return int(dst) } func (c *defaultContext) GetUniformLocation(program uint32, name string) int32 { diff --git a/internal/graphicsdriver/opengl/gl/gomobile.go b/internal/graphicsdriver/opengl/gl/gomobile.go index 95198b376..3dca53ed7 100644 --- a/internal/graphicsdriver/opengl/gl/gomobile.go +++ b/internal/graphicsdriver/opengl/gl/gomobile.go @@ -226,16 +226,16 @@ func (g *gomobileContext) GetProgramInfoLog(program uint32) string { return g.ctx.GetProgramInfoLog(gmProgram(program)) } -func (g *gomobileContext) GetProgramiv(dst []int32, program uint32, pname uint32) { - dst[0] = int32(g.ctx.GetProgrami(gmProgram(program), gl.Enum(pname))) +func (g *gomobileContext) GetProgrami(program uint32, pname uint32) int { + return g.ctx.GetProgrami(gmProgram(program), gl.Enum(pname)) } func (g *gomobileContext) GetShaderInfoLog(shader uint32) string { return g.ctx.GetShaderInfoLog(gl.Shader{Value: shader}) } -func (g *gomobileContext) GetShaderiv(dst []int32, shader uint32, pname uint32) { - dst[0] = int32(g.ctx.GetShaderi(gl.Shader{Value: shader}, gl.Enum(pname))) +func (g *gomobileContext) GetShaderi(shader uint32, pname uint32) int { + return g.ctx.GetShaderi(gl.Shader{Value: shader}, gl.Enum(pname)) } func (g *gomobileContext) GetUniformLocation(program uint32, name string) int32 { diff --git a/internal/graphicsdriver/opengl/gl/interface.go b/internal/graphicsdriver/opengl/gl/interface.go index d2a878d8c..ff53f9e6f 100644 --- a/internal/graphicsdriver/opengl/gl/interface.go +++ b/internal/graphicsdriver/opengl/gl/interface.go @@ -60,9 +60,9 @@ type Context interface { GetError() uint32 GetInteger(pname uint32) int GetProgramInfoLog(program uint32) string - GetProgramiv(dst []int32, program uint32, pname uint32) + GetProgrami(program uint32, pname uint32) int GetShaderInfoLog(shader uint32) string - GetShaderiv(dst []int32, shader uint32, pname uint32) + GetShaderi(shader uint32, pname uint32) int GetUniformLocation(program uint32, name string) int32 IsFramebuffer(framebuffer uint32) bool IsProgram(program uint32) bool