// Copyright 2015 The Go Authors.  All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package gl

import "unsafe"

type call struct {
	args     fnargs
	parg     unsafe.Pointer
	blocking bool
}

type fnargs struct {
	fn glfn

	a0 uintptr
	a1 uintptr
	a2 uintptr
	a3 uintptr
	a4 uintptr
	a5 uintptr
	a6 uintptr
	a7 uintptr
	a8 uintptr
	a9 uintptr
}

type glfn int

const (
	glfnUNDEFINED glfn = iota
	glfnActiveTexture
	glfnAttachShader
	glfnBindAttribLocation
	glfnBindBuffer
	glfnBindFramebuffer
	glfnBindRenderbuffer
	glfnBindTexture
	glfnBlendColor
	glfnBlendEquation
	glfnBlendEquationSeparate
	glfnBlendFunc
	glfnBlendFuncSeparate
	glfnBufferData
	glfnBufferSubData
	glfnCheckFramebufferStatus
	glfnClear
	glfnClearColor
	glfnClearDepthf
	glfnClearStencil
	glfnColorMask
	glfnCompileShader
	glfnCompressedTexImage2D
	glfnCompressedTexSubImage2D
	glfnCopyTexImage2D
	glfnCopyTexSubImage2D
	glfnCreateProgram
	glfnCreateShader
	glfnCullFace
	glfnDeleteBuffer
	glfnDeleteFramebuffer
	glfnDeleteProgram
	glfnDeleteRenderbuffer
	glfnDeleteShader
	glfnDeleteTexture
	glfnDepthFunc
	glfnDepthRangef
	glfnDepthMask
	glfnDetachShader
	glfnDisable
	glfnDisableVertexAttribArray
	glfnDrawArrays
	glfnDrawElements
	glfnEnable
	glfnEnableVertexAttribArray
	glfnFinish
	glfnFlush
	glfnFramebufferRenderbuffer
	glfnFramebufferTexture2D
	glfnFrontFace
	glfnGenBuffer
	glfnGenFramebuffer
	glfnGenRenderbuffer
	glfnGenTexture
	glfnGenerateMipmap
	glfnGetActiveAttrib
	glfnGetActiveUniform
	glfnGetAttachedShaders
	glfnGetAttribLocation
	glfnGetBooleanv
	glfnGetBufferParameteri
	glfnGetError
	glfnGetFloatv
	glfnGetFramebufferAttachmentParameteriv
	glfnGetIntegerv
	glfnGetProgramInfoLog
	glfnGetProgramiv
	glfnGetRenderbufferParameteriv
	glfnGetShaderInfoLog
	glfnGetShaderPrecisionFormat
	glfnGetShaderSource
	glfnGetShaderiv
	glfnGetString
	glfnGetTexParameterfv
	glfnGetTexParameteriv
	glfnGetUniformLocation
	glfnGetUniformfv
	glfnGetUniformiv
	glfnGetVertexAttribfv
	glfnGetVertexAttribiv
	glfnHint
	glfnIsBuffer
	glfnIsEnabled
	glfnIsFramebuffer
	glfnIsProgram
	glfnIsRenderbuffer
	glfnIsShader
	glfnIsTexture
	glfnLineWidth
	glfnLinkProgram
	glfnPixelStorei
	glfnPolygonOffset
	glfnReadPixels
	glfnReleaseShaderCompiler
	glfnRenderbufferStorage
	glfnSampleCoverage
	glfnScissor
	glfnShaderSource
	glfnStencilFunc
	glfnStencilFuncSeparate
	glfnStencilMask
	glfnStencilMaskSeparate
	glfnStencilOp
	glfnStencilOpSeparate
	glfnTexImage2D
	glfnTexParameterf
	glfnTexParameterfv
	glfnTexParameteri
	glfnTexParameteriv
	glfnTexSubImage2D
	glfnUniform1f
	glfnUniform1fv
	glfnUniform1i
	glfnUniform1iv
	glfnUniform2f
	glfnUniform2fv
	glfnUniform2i
	glfnUniform2iv
	glfnUniform3f
	glfnUniform3fv
	glfnUniform3i
	glfnUniform3iv
	glfnUniform4f
	glfnUniform4fv
	glfnUniform4i
	glfnUniform4iv
	glfnUniformMatrix2fv
	glfnUniformMatrix3fv
	glfnUniformMatrix4fv
	glfnUseProgram
	glfnValidateProgram
	glfnVertexAttrib1f
	glfnVertexAttrib1fv
	glfnVertexAttrib2f
	glfnVertexAttrib2fv
	glfnVertexAttrib3f
	glfnVertexAttrib3fv
	glfnVertexAttrib4f
	glfnVertexAttrib4fv
	glfnVertexAttribPointer
	glfnViewport

	// ES 3.0 functions
	glfnUniformMatrix2x3fv
	glfnUniformMatrix3x2fv
	glfnUniformMatrix2x4fv
	glfnUniformMatrix4x2fv
	glfnUniformMatrix3x4fv
	glfnUniformMatrix4x3fv
	glfnBlitFramebuffer
	glfnUniform1ui
	glfnUniform2ui
	glfnUniform3ui
	glfnUniform4ui
	glfnUniform1uiv
	glfnUniform2uiv
	glfnUniform3uiv
	glfnUniform4uiv
)

func goString(buf []byte) string {
	for i, b := range buf {
		if b == 0 {
			return string(buf[:i])
		}
	}
	panic("buf is not NUL-terminated")
}

func glBoolean(b bool) uintptr {
	if b {
		return TRUE
	}
	return FALSE
}
