internal/graphicsdriver/opengl/gl/conversions_windows.go
func Strs(strs ...string) (cstrs **uint8, free func()) {
	if len(strs) == 0 {
		panic("Strs: expected at least 1 string")
	}

	var pinned []string
	var ptrs []*uint8
	for _, str := range strs {
		if !strings.HasSuffix(str, "\x00") {
			str += "\x00"
		}
		pinned = append(pinned, str)
		ptrs = append(ptrs, Str(str))
	}

	return &ptrs[0], func() {
		runtime.KeepAlive(pinned)
		pinned = nil
	}
}
func Strs(strs ...string) (cstrs **uint8, free func()) {
	if len(strs) == 0 {
		panic("Strs: expected at least 1 string")
	}

	var pinned []string
	var ptrs []*uint8
	for _, str := range strs {
		if !strings.HasSuffix(str, "\x00") {
			str += "\x00"
		}
		pinned = append(pinned, str)
		ptrs = append(ptrs, Str(str))
	}

	return &ptrs[0], func() {
		runtime.KeepAlive(pinned)
		pinned = nil
	}
}
// Strs takes a list of Go strings (with or without null-termination) and
// returns their C counterpart.
//
// The returned free function must be called once you are done using the strings
// in order to free the memory.
//
// If no strings are provided as a parameter this function will panic.