diff --git a/internal/graphicsdriver/opengl/gles/default.go b/internal/graphicsdriver/opengl/gles/default.go index dd8a9989f..2bd7d8b2b 100644 --- a/internal/graphicsdriver/opengl/gles/default.go +++ b/internal/graphicsdriver/opengl/gles/default.go @@ -30,6 +30,8 @@ package gles // #define GLES_SILENCE_DEPRECATION // #include // #endif +// +// #include import "C" import ( @@ -54,8 +56,8 @@ func (DefaultContext) AttachShader(program uint32, shader uint32) { } func (DefaultContext) BindAttribLocation(program uint32, index uint32, name string) { - s, free := cString(name) - defer free() + s := C.CString(name) + defer C.free(unsafe.Pointer(s)) C.glBindAttribLocation(C.GLuint(program), C.GLuint(index), (*C.GLchar)(unsafe.Pointer(s))) } @@ -245,8 +247,8 @@ func (DefaultContext) GetShaderPrecisionFormat(shadertype uint32, precisiontype } func (DefaultContext) GetUniformLocation(program uint32, name string) int32 { - s, free := cString(name) - defer free() + s := C.CString(name) + defer C.free(unsafe.Pointer(s)) return int32(C.glGetUniformLocation(C.GLuint(program), (*C.GLchar)(unsafe.Pointer(s)))) } @@ -289,7 +291,7 @@ func (DefaultContext) Scissor(x, y, width, height int32) { func (DefaultContext) ShaderSource(shader uint32, xstring string) { s, free := cStringPtr(xstring) defer free() - C.glShaderSource(C.GLuint(shader), 1, (**C.GLchar)(unsafe.Pointer(s)), nil) + C.glShaderSource(C.GLuint(shader), 1, (**C.GLchar)(s), nil) } func (DefaultContext) StencilFunc(func_ uint32, ref int32, mask uint32) { diff --git a/internal/graphicsdriver/opengl/gles/str.go b/internal/graphicsdriver/opengl/gles/str.go index 74b1506b0..3ec6be9ea 100644 --- a/internal/graphicsdriver/opengl/gles/str.go +++ b/internal/graphicsdriver/opengl/gles/str.go @@ -24,17 +24,12 @@ import ( "unsafe" ) -func cString(str string) (uintptr, func()) { - ptr := C.CString(str) - return uintptr(unsafe.Pointer(ptr)), func() { C.free(unsafe.Pointer(ptr)) } -} - -func cStringPtr(str string) (uintptr, func()) { - s, free := cString(str) +func cStringPtr(str string) (unsafe.Pointer, func()) { + s := C.CString(str) ptr := C.malloc(C.size_t(unsafe.Sizeof((*int)(nil)))) - *(*uintptr)(ptr) = s - return uintptr(ptr), func() { - free() + *(*unsafe.Pointer)(ptr) = unsafe.Pointer(s) + return ptr, func() { + C.free(unsafe.Pointer(s)) C.free(ptr) } }