Adding upstream version 0.0~git20250520.a1d9079+dfsg.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
590ac7ff5f
commit
20149b7f3a
456 changed files with 70406 additions and 0 deletions
569
gl/work_windows.go
Normal file
569
gl/work_windows.go
Normal file
|
@ -0,0 +1,569 @@
|
|||
// 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 (
|
||||
"runtime"
|
||||
"syscall"
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// context is described in work.go.
|
||||
type context struct {
|
||||
debug int32
|
||||
workAvailable chan struct{}
|
||||
work chan call
|
||||
retvalue chan uintptr
|
||||
|
||||
// TODO(crawshaw): will not work with a moving collector
|
||||
cStringCounter int
|
||||
cStrings map[int]unsafe.Pointer
|
||||
}
|
||||
|
||||
func (ctx *context) WorkAvailable() <-chan struct{} { return ctx.workAvailable }
|
||||
|
||||
type context3 struct {
|
||||
*context
|
||||
}
|
||||
|
||||
func NewContext() (Context, Worker) {
|
||||
if err := findDLLs(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
glctx := &context{
|
||||
workAvailable: make(chan struct{}, 1),
|
||||
work: make(chan call, 3),
|
||||
retvalue: make(chan uintptr),
|
||||
cStrings: make(map[int]unsafe.Pointer),
|
||||
}
|
||||
return glctx, glctx
|
||||
}
|
||||
|
||||
func (ctx *context) enqueue(c call) uintptr {
|
||||
ctx.work <- c
|
||||
|
||||
select {
|
||||
case ctx.workAvailable <- struct{}{}:
|
||||
default:
|
||||
}
|
||||
|
||||
if c.blocking {
|
||||
return <-ctx.retvalue
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (ctx *context) DoWork() {
|
||||
// TODO: add a work queue
|
||||
for {
|
||||
select {
|
||||
case w := <-ctx.work:
|
||||
ret := ctx.doWork(w)
|
||||
if w.blocking {
|
||||
ctx.retvalue <- ret
|
||||
}
|
||||
default:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (ctx *context) cString(s string) (uintptr, func()) {
|
||||
buf := make([]byte, len(s)+1)
|
||||
for i := 0; i < len(s); i++ {
|
||||
buf[i] = s[i]
|
||||
}
|
||||
ret := unsafe.Pointer(&buf[0])
|
||||
id := ctx.cStringCounter
|
||||
ctx.cStringCounter++
|
||||
ctx.cStrings[id] = ret
|
||||
return uintptr(ret), func() { delete(ctx.cStrings, id) }
|
||||
}
|
||||
|
||||
func (ctx *context) cStringPtr(str string) (uintptr, func()) {
|
||||
s, sfree := ctx.cString(str)
|
||||
sptr := [2]uintptr{s, 0}
|
||||
ret := unsafe.Pointer(&sptr[0])
|
||||
id := ctx.cStringCounter
|
||||
ctx.cStringCounter++
|
||||
ctx.cStrings[id] = ret
|
||||
return uintptr(ret), func() { sfree(); delete(ctx.cStrings, id) }
|
||||
}
|
||||
|
||||
// fixFloat copies the first four arguments into the XMM registers.
|
||||
// This is for the windows/amd64 calling convention, that wants
|
||||
// floating point arguments to be passed in XMM.
|
||||
//
|
||||
// Mercifully, type information is not required to implement
|
||||
// this calling convention. In particular see the mixed int/float
|
||||
// examples:
|
||||
//
|
||||
// https://msdn.microsoft.com/en-us/library/zthk2dkh.aspx
|
||||
//
|
||||
// This means it could be fixed in syscall.Syscall. The relevant
|
||||
// issue is
|
||||
//
|
||||
// https://golang.org/issue/6510
|
||||
func fixFloat(x0, x1, x2, x3 uintptr)
|
||||
|
||||
func (ctx *context) doWork(c call) (ret uintptr) {
|
||||
if runtime.GOARCH == "amd64" {
|
||||
fixFloat(c.args.a0, c.args.a1, c.args.a2, c.args.a3)
|
||||
}
|
||||
|
||||
switch c.args.fn {
|
||||
case glfnActiveTexture:
|
||||
syscall.Syscall(glActiveTexture.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnAttachShader:
|
||||
syscall.Syscall(glAttachShader.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnBindAttribLocation:
|
||||
syscall.Syscall(glBindAttribLocation.Addr(), 3, c.args.a0, c.args.a1, c.args.a2)
|
||||
case glfnBindBuffer:
|
||||
syscall.Syscall(glBindBuffer.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnBindFramebuffer:
|
||||
syscall.Syscall(glBindFramebuffer.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnBindRenderbuffer:
|
||||
syscall.Syscall(glBindRenderbuffer.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnBindTexture:
|
||||
syscall.Syscall(glBindTexture.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnBindVertexArray:
|
||||
syscall.Syscall(glBindVertexArray.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnBlendColor:
|
||||
syscall.Syscall6(glBlendColor.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnBlendEquation:
|
||||
syscall.Syscall(glBlendEquation.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnBlendEquationSeparate:
|
||||
syscall.Syscall(glBlendEquationSeparate.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnBlendFunc:
|
||||
syscall.Syscall(glBlendFunc.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnBlendFuncSeparate:
|
||||
syscall.Syscall6(glBlendFuncSeparate.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnBufferData:
|
||||
syscall.Syscall6(glBufferData.Addr(), 4, c.args.a0, c.args.a1, uintptr(c.parg), c.args.a2, 0, 0)
|
||||
case glfnBufferSubData:
|
||||
syscall.Syscall6(glBufferSubData.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, uintptr(c.parg), 0, 0)
|
||||
case glfnCheckFramebufferStatus:
|
||||
ret, _, _ = syscall.Syscall(glCheckFramebufferStatus.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnClear:
|
||||
syscall.Syscall(glClear.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnClearColor:
|
||||
syscall.Syscall6(glClearColor.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnClearDepthf:
|
||||
syscall.Syscall6(glClearDepthf.Addr(), 1, c.args.a0, 0, 0, 0, 0, 0)
|
||||
case glfnClearStencil:
|
||||
syscall.Syscall(glClearStencil.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnColorMask:
|
||||
syscall.Syscall6(glColorMask.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnCompileShader:
|
||||
syscall.Syscall(glCompileShader.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnCompressedTexImage2D:
|
||||
syscall.Syscall9(glCompressedTexImage2D.Addr(), 8, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5, c.args.a6, uintptr(c.parg), 0)
|
||||
case glfnCompressedTexSubImage2D:
|
||||
syscall.Syscall9(glCompressedTexSubImage2D.Addr(), 9, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5, c.args.a6, c.args.a7, uintptr(c.parg))
|
||||
case glfnCopyTexImage2D:
|
||||
syscall.Syscall9(glCopyTexImage2D.Addr(), 8, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5, c.args.a6, c.args.a7, 0)
|
||||
case glfnCopyTexSubImage2D:
|
||||
syscall.Syscall9(glCopyTexSubImage2D.Addr(), 8, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5, c.args.a6, c.args.a7, 0)
|
||||
case glfnCreateProgram:
|
||||
ret, _, _ = syscall.Syscall(glCreateProgram.Addr(), 0, 0, 0, 0)
|
||||
case glfnCreateShader:
|
||||
ret, _, _ = syscall.Syscall(glCreateShader.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnCullFace:
|
||||
syscall.Syscall(glCullFace.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnDeleteBuffer:
|
||||
syscall.Syscall(glDeleteBuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&c.args.a0)), 0)
|
||||
case glfnDeleteFramebuffer:
|
||||
syscall.Syscall(glDeleteFramebuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&c.args.a0)), 0)
|
||||
case glfnDeleteProgram:
|
||||
syscall.Syscall(glDeleteProgram.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnDeleteRenderbuffer:
|
||||
syscall.Syscall(glDeleteRenderbuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&c.args.a0)), 0)
|
||||
case glfnDeleteShader:
|
||||
syscall.Syscall(glDeleteShader.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnDeleteVertexArray:
|
||||
syscall.Syscall(glDeleteVertexArrays.Addr(), 2, 1, uintptr(unsafe.Pointer(&c.args.a0)), 0)
|
||||
case glfnDeleteTexture:
|
||||
syscall.Syscall(glDeleteTextures.Addr(), 2, 1, uintptr(unsafe.Pointer(&c.args.a0)), 0)
|
||||
case glfnDepthFunc:
|
||||
syscall.Syscall(glDepthFunc.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnDepthRangef:
|
||||
syscall.Syscall6(glDepthRangef.Addr(), 2, c.args.a0, c.args.a1, 0, 0, 0, 0)
|
||||
case glfnDepthMask:
|
||||
syscall.Syscall(glDepthMask.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnDetachShader:
|
||||
syscall.Syscall(glDetachShader.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnDisable:
|
||||
syscall.Syscall(glDisable.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnDisableVertexAttribArray:
|
||||
syscall.Syscall(glDisableVertexAttribArray.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnDrawArrays:
|
||||
syscall.Syscall(glDrawArrays.Addr(), 3, c.args.a0, c.args.a1, c.args.a2)
|
||||
case glfnDrawElements:
|
||||
syscall.Syscall6(glDrawElements.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnEnable:
|
||||
syscall.Syscall(glEnable.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnEnableVertexAttribArray:
|
||||
syscall.Syscall(glEnableVertexAttribArray.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnFinish:
|
||||
syscall.Syscall(glFinish.Addr(), 0, 0, 0, 0)
|
||||
case glfnFlush:
|
||||
syscall.Syscall(glFlush.Addr(), 0, 0, 0, 0)
|
||||
case glfnFramebufferRenderbuffer:
|
||||
syscall.Syscall6(glFramebufferRenderbuffer.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnFramebufferTexture2D:
|
||||
syscall.Syscall6(glFramebufferTexture2D.Addr(), 5, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, 0)
|
||||
case glfnFrontFace:
|
||||
syscall.Syscall(glFrontFace.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnGenBuffer:
|
||||
syscall.Syscall(glGenBuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&ret)), 0)
|
||||
case glfnGenFramebuffer:
|
||||
syscall.Syscall(glGenFramebuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&ret)), 0)
|
||||
case glfnGenRenderbuffer:
|
||||
syscall.Syscall(glGenRenderbuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&ret)), 0)
|
||||
case glfnGenVertexArray:
|
||||
syscall.Syscall(glGenVertexArrays.Addr(), 2, 1, uintptr(unsafe.Pointer(&ret)), 0)
|
||||
case glfnGenTexture:
|
||||
syscall.Syscall(glGenTextures.Addr(), 2, 1, uintptr(unsafe.Pointer(&ret)), 0)
|
||||
case glfnGenerateMipmap:
|
||||
syscall.Syscall(glGenerateMipmap.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnGetActiveAttrib:
|
||||
syscall.Syscall9(glGetActiveAttrib.Addr(), 7, c.args.a0, c.args.a1, c.args.a2, 0, uintptr(unsafe.Pointer(&ret)), c.args.a3, uintptr(c.parg), 0, 0)
|
||||
case glfnGetActiveUniform:
|
||||
syscall.Syscall9(glGetActiveUniform.Addr(), 7, c.args.a0, c.args.a1, c.args.a2, 0, uintptr(unsafe.Pointer(&ret)), c.args.a3, uintptr(c.parg), 0, 0)
|
||||
case glfnGetAttachedShaders:
|
||||
syscall.Syscall6(glGetAttachedShaders.Addr(), 4, c.args.a0, c.args.a1, uintptr(unsafe.Pointer(&ret)), uintptr(c.parg), 0, 0)
|
||||
case glfnGetAttribLocation:
|
||||
ret, _, _ = syscall.Syscall(glGetAttribLocation.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnGetBooleanv:
|
||||
syscall.Syscall(glGetBooleanv.Addr(), 2, c.args.a0, uintptr(c.parg), 0)
|
||||
case glfnGetBufferParameteri:
|
||||
syscall.Syscall(glGetBufferParameteri.Addr(), 3, c.args.a0, c.args.a1, uintptr(unsafe.Pointer(&ret)))
|
||||
case glfnGetError:
|
||||
ret, _, _ = syscall.Syscall(glGetError.Addr(), 0, 0, 0, 0)
|
||||
case glfnGetFloatv:
|
||||
syscall.Syscall(glGetFloatv.Addr(), 2, c.args.a0, uintptr(c.parg), 0)
|
||||
case glfnGetFramebufferAttachmentParameteriv:
|
||||
syscall.Syscall6(glGetFramebufferAttachmentParameteriv.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, uintptr(unsafe.Pointer(&ret)), 0, 0)
|
||||
case glfnGetIntegerv:
|
||||
syscall.Syscall(glGetIntegerv.Addr(), 2, c.args.a0, uintptr(c.parg), 0)
|
||||
case glfnGetProgramInfoLog:
|
||||
syscall.Syscall6(glGetProgramInfoLog.Addr(), 4, c.args.a0, c.args.a1, 0, uintptr(c.parg), 0, 0)
|
||||
case glfnGetProgramiv:
|
||||
syscall.Syscall(glGetProgramiv.Addr(), 3, c.args.a0, c.args.a1, uintptr(unsafe.Pointer(&ret)))
|
||||
case glfnGetRenderbufferParameteriv:
|
||||
syscall.Syscall(glGetRenderbufferParameteriv.Addr(), 3, c.args.a0, c.args.a1, uintptr(unsafe.Pointer(&ret)))
|
||||
case glfnGetShaderInfoLog:
|
||||
syscall.Syscall6(glGetShaderInfoLog.Addr(), 4, c.args.a0, c.args.a1, 0, uintptr(c.parg), 0, 0)
|
||||
case glfnGetShaderPrecisionFormat:
|
||||
// c.parg is a [3]int32. The first [2]int32 of the array is one
|
||||
// parameter, the final *int32 is another parameter.
|
||||
syscall.Syscall6(glGetShaderPrecisionFormat.Addr(), 4, c.args.a0, c.args.a1, uintptr(c.parg), uintptr(c.parg)+2*unsafe.Sizeof(uintptr(0)), 0, 0)
|
||||
case glfnGetShaderSource:
|
||||
syscall.Syscall6(glGetShaderSource.Addr(), 4, c.args.a0, c.args.a1, 0, uintptr(c.parg), 0, 0)
|
||||
case glfnGetShaderiv:
|
||||
syscall.Syscall(glGetShaderiv.Addr(), 3, c.args.a0, c.args.a1, uintptr(unsafe.Pointer(&ret)))
|
||||
case glfnGetString:
|
||||
ret, _, _ = syscall.Syscall(glGetString.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnGetTexParameterfv:
|
||||
syscall.Syscall(glGetTexParameterfv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnGetTexParameteriv:
|
||||
syscall.Syscall(glGetTexParameteriv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnGetUniformLocation:
|
||||
ret, _, _ = syscall.Syscall(glGetUniformLocation.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnGetUniformfv:
|
||||
syscall.Syscall(glGetUniformfv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnGetUniformiv:
|
||||
syscall.Syscall(glGetUniformiv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnGetVertexAttribfv:
|
||||
syscall.Syscall(glGetVertexAttribfv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnGetVertexAttribiv:
|
||||
syscall.Syscall(glGetVertexAttribiv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnHint:
|
||||
syscall.Syscall(glHint.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnIsBuffer:
|
||||
syscall.Syscall(glIsBuffer.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnIsEnabled:
|
||||
syscall.Syscall(glIsEnabled.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnIsFramebuffer:
|
||||
syscall.Syscall(glIsFramebuffer.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnIsProgram:
|
||||
ret, _, _ = syscall.Syscall(glIsProgram.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnIsRenderbuffer:
|
||||
syscall.Syscall(glIsRenderbuffer.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnIsShader:
|
||||
syscall.Syscall(glIsShader.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnIsTexture:
|
||||
syscall.Syscall(glIsTexture.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnLineWidth:
|
||||
syscall.Syscall(glLineWidth.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnLinkProgram:
|
||||
syscall.Syscall(glLinkProgram.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnPixelStorei:
|
||||
syscall.Syscall(glPixelStorei.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnPolygonOffset:
|
||||
syscall.Syscall6(glPolygonOffset.Addr(), 2, c.args.a0, c.args.a1, 0, 0, 0, 0)
|
||||
case glfnReadPixels:
|
||||
syscall.Syscall9(glReadPixels.Addr(), 7, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5, uintptr(c.parg), 0, 0)
|
||||
case glfnReleaseShaderCompiler:
|
||||
syscall.Syscall(glReleaseShaderCompiler.Addr(), 0, 0, 0, 0)
|
||||
case glfnRenderbufferStorage:
|
||||
syscall.Syscall6(glRenderbufferStorage.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnSampleCoverage:
|
||||
syscall.Syscall6(glSampleCoverage.Addr(), 1, c.args.a0, 0, 0, 0, 0, 0)
|
||||
case glfnScissor:
|
||||
syscall.Syscall6(glScissor.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnShaderSource:
|
||||
syscall.Syscall6(glShaderSource.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, 0, 0, 0)
|
||||
case glfnStencilFunc:
|
||||
syscall.Syscall(glStencilFunc.Addr(), 3, c.args.a0, c.args.a1, c.args.a2)
|
||||
case glfnStencilFuncSeparate:
|
||||
syscall.Syscall6(glStencilFuncSeparate.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnStencilMask:
|
||||
syscall.Syscall(glStencilMask.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnStencilMaskSeparate:
|
||||
syscall.Syscall(glStencilMaskSeparate.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnStencilOp:
|
||||
syscall.Syscall(glStencilOp.Addr(), 3, c.args.a0, c.args.a1, c.args.a2)
|
||||
case glfnStencilOpSeparate:
|
||||
syscall.Syscall6(glStencilOpSeparate.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnTexImage2D:
|
||||
syscall.Syscall9(glTexImage2D.Addr(), 9, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, 0, c.args.a5, c.args.a6, uintptr(c.parg))
|
||||
case glfnTexParameterf:
|
||||
syscall.Syscall6(glTexParameterf.Addr(), 3, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnTexParameterfv:
|
||||
syscall.Syscall(glTexParameterfv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnTexParameteri:
|
||||
syscall.Syscall(glTexParameteri.Addr(), 3, c.args.a0, c.args.a1, c.args.a2)
|
||||
case glfnTexParameteriv:
|
||||
syscall.Syscall(glTexParameteriv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnTexSubImage2D:
|
||||
syscall.Syscall9(glTexSubImage2D.Addr(), 9, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5, c.args.a6, c.args.a7, uintptr(c.parg))
|
||||
case glfnUniform1f:
|
||||
syscall.Syscall6(glUniform1f.Addr(), 2, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnUniform1fv:
|
||||
syscall.Syscall(glUniform1fv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnUniform1i:
|
||||
syscall.Syscall(glUniform1i.Addr(), 2, c.args.a0, c.args.a1, 0)
|
||||
case glfnUniform1iv:
|
||||
syscall.Syscall(glUniform1iv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnUniform2f:
|
||||
syscall.Syscall6(glUniform2f.Addr(), 3, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnUniform2fv:
|
||||
syscall.Syscall(glUniform2fv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnUniform2i:
|
||||
syscall.Syscall(glUniform2i.Addr(), 3, c.args.a0, c.args.a1, c.args.a2)
|
||||
case glfnUniform2iv:
|
||||
syscall.Syscall(glUniform2iv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnUniform3f:
|
||||
syscall.Syscall6(glUniform3f.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnUniform3fv:
|
||||
syscall.Syscall(glUniform3fv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnUniform3i:
|
||||
syscall.Syscall6(glUniform3i.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
case glfnUniform3iv:
|
||||
syscall.Syscall(glUniform3iv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnUniform4f:
|
||||
syscall.Syscall6(glUniform4f.Addr(), 5, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnUniform4fv:
|
||||
syscall.Syscall(glUniform4fv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnUniform4i:
|
||||
syscall.Syscall6(glUniform4i.Addr(), 5, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, 0)
|
||||
case glfnUniform4iv:
|
||||
syscall.Syscall(glUniform4iv.Addr(), 3, c.args.a0, c.args.a1, uintptr(c.parg))
|
||||
case glfnUniformMatrix2fv:
|
||||
syscall.Syscall6(glUniformMatrix2fv.Addr(), 4, c.args.a0, c.args.a1, 0, uintptr(c.parg), 0, 0)
|
||||
case glfnUniformMatrix3fv:
|
||||
syscall.Syscall6(glUniformMatrix3fv.Addr(), 4, c.args.a0, c.args.a1, 0, uintptr(c.parg), 0, 0)
|
||||
case glfnUniformMatrix4fv:
|
||||
syscall.Syscall6(glUniformMatrix4fv.Addr(), 4, c.args.a0, c.args.a1, 0, uintptr(c.parg), 0, 0)
|
||||
case glfnUseProgram:
|
||||
syscall.Syscall(glUseProgram.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnValidateProgram:
|
||||
syscall.Syscall(glValidateProgram.Addr(), 1, c.args.a0, 0, 0)
|
||||
case glfnVertexAttrib1f:
|
||||
syscall.Syscall6(glVertexAttrib1f.Addr(), 2, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnVertexAttrib1fv:
|
||||
syscall.Syscall(glVertexAttrib1fv.Addr(), 2, c.args.a0, uintptr(c.parg), 0)
|
||||
case glfnVertexAttrib2f:
|
||||
syscall.Syscall6(glVertexAttrib2f.Addr(), 3, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnVertexAttrib2fv:
|
||||
syscall.Syscall(glVertexAttrib2fv.Addr(), 2, c.args.a0, uintptr(c.parg), 0)
|
||||
case glfnVertexAttrib3f:
|
||||
syscall.Syscall6(glVertexAttrib3f.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnVertexAttrib3fv:
|
||||
syscall.Syscall(glVertexAttrib3fv.Addr(), 2, c.args.a0, uintptr(c.parg), 0)
|
||||
case glfnVertexAttrib4f:
|
||||
syscall.Syscall6(glVertexAttrib4f.Addr(), 5, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnVertexAttrib4fv:
|
||||
syscall.Syscall(glVertexAttrib4fv.Addr(), 2, c.args.a0, uintptr(c.parg), 0)
|
||||
case glfnVertexAttribPointer:
|
||||
syscall.Syscall6(glVertexAttribPointer.Addr(), 6, c.args.a0, c.args.a1, c.args.a2, c.args.a3, c.args.a4, c.args.a5)
|
||||
case glfnViewport:
|
||||
syscall.Syscall6(glViewport.Addr(), 4, c.args.a0, c.args.a1, c.args.a2, c.args.a3, 0, 0)
|
||||
default:
|
||||
panic("unknown GL function")
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
// Exported libraries for a Windows GUI driver.
|
||||
//
|
||||
// LibEGL is not used directly by the gl package, but is needed by any
|
||||
// driver hoping to use OpenGL ES.
|
||||
//
|
||||
// LibD3DCompiler is needed by libglesv2.dll for compiling shaders.
|
||||
var (
|
||||
LibGLESv2 = syscall.NewLazyDLL("libglesv2.dll")
|
||||
LibEGL = syscall.NewLazyDLL("libegl.dll")
|
||||
LibD3DCompiler = syscall.NewLazyDLL("d3dcompiler_47.dll")
|
||||
)
|
||||
|
||||
var (
|
||||
libGLESv2 = LibGLESv2
|
||||
glActiveTexture = libGLESv2.NewProc("glActiveTexture")
|
||||
glAttachShader = libGLESv2.NewProc("glAttachShader")
|
||||
glBindAttribLocation = libGLESv2.NewProc("glBindAttribLocation")
|
||||
glBindBuffer = libGLESv2.NewProc("glBindBuffer")
|
||||
glBindFramebuffer = libGLESv2.NewProc("glBindFramebuffer")
|
||||
glBindRenderbuffer = libGLESv2.NewProc("glBindRenderbuffer")
|
||||
glBindTexture = libGLESv2.NewProc("glBindTexture")
|
||||
glBindVertexArray = libGLESv2.NewProc("glBindVertexArray")
|
||||
glBlendColor = libGLESv2.NewProc("glBlendColor")
|
||||
glBlendEquation = libGLESv2.NewProc("glBlendEquation")
|
||||
glBlendEquationSeparate = libGLESv2.NewProc("glBlendEquationSeparate")
|
||||
glBlendFunc = libGLESv2.NewProc("glBlendFunc")
|
||||
glBlendFuncSeparate = libGLESv2.NewProc("glBlendFuncSeparate")
|
||||
glBufferData = libGLESv2.NewProc("glBufferData")
|
||||
glBufferSubData = libGLESv2.NewProc("glBufferSubData")
|
||||
glCheckFramebufferStatus = libGLESv2.NewProc("glCheckFramebufferStatus")
|
||||
glClear = libGLESv2.NewProc("glClear")
|
||||
glClearColor = libGLESv2.NewProc("glClearColor")
|
||||
glClearDepthf = libGLESv2.NewProc("glClearDepthf")
|
||||
glClearStencil = libGLESv2.NewProc("glClearStencil")
|
||||
glColorMask = libGLESv2.NewProc("glColorMask")
|
||||
glCompileShader = libGLESv2.NewProc("glCompileShader")
|
||||
glCompressedTexImage2D = libGLESv2.NewProc("glCompressedTexImage2D")
|
||||
glCompressedTexSubImage2D = libGLESv2.NewProc("glCompressedTexSubImage2D")
|
||||
glCopyTexImage2D = libGLESv2.NewProc("glCopyTexImage2D")
|
||||
glCopyTexSubImage2D = libGLESv2.NewProc("glCopyTexSubImage2D")
|
||||
glCreateProgram = libGLESv2.NewProc("glCreateProgram")
|
||||
glCreateShader = libGLESv2.NewProc("glCreateShader")
|
||||
glCullFace = libGLESv2.NewProc("glCullFace")
|
||||
glDeleteBuffers = libGLESv2.NewProc("glDeleteBuffers")
|
||||
glDeleteFramebuffers = libGLESv2.NewProc("glDeleteFramebuffers")
|
||||
glDeleteProgram = libGLESv2.NewProc("glDeleteProgram")
|
||||
glDeleteRenderbuffers = libGLESv2.NewProc("glDeleteRenderbuffers")
|
||||
glDeleteShader = libGLESv2.NewProc("glDeleteShader")
|
||||
glDeleteTextures = libGLESv2.NewProc("glDeleteTextures")
|
||||
glDeleteVertexArrays = libGLESv2.NewProc("glDeleteVertexArrays")
|
||||
glDepthFunc = libGLESv2.NewProc("glDepthFunc")
|
||||
glDepthRangef = libGLESv2.NewProc("glDepthRangef")
|
||||
glDepthMask = libGLESv2.NewProc("glDepthMask")
|
||||
glDetachShader = libGLESv2.NewProc("glDetachShader")
|
||||
glDisable = libGLESv2.NewProc("glDisable")
|
||||
glDisableVertexAttribArray = libGLESv2.NewProc("glDisableVertexAttribArray")
|
||||
glDrawArrays = libGLESv2.NewProc("glDrawArrays")
|
||||
glDrawElements = libGLESv2.NewProc("glDrawElements")
|
||||
glEnable = libGLESv2.NewProc("glEnable")
|
||||
glEnableVertexAttribArray = libGLESv2.NewProc("glEnableVertexAttribArray")
|
||||
glFinish = libGLESv2.NewProc("glFinish")
|
||||
glFlush = libGLESv2.NewProc("glFlush")
|
||||
glFramebufferRenderbuffer = libGLESv2.NewProc("glFramebufferRenderbuffer")
|
||||
glFramebufferTexture2D = libGLESv2.NewProc("glFramebufferTexture2D")
|
||||
glFrontFace = libGLESv2.NewProc("glFrontFace")
|
||||
glGenBuffers = libGLESv2.NewProc("glGenBuffers")
|
||||
glGenFramebuffers = libGLESv2.NewProc("glGenFramebuffers")
|
||||
glGenRenderbuffers = libGLESv2.NewProc("glGenRenderbuffers")
|
||||
glGenTextures = libGLESv2.NewProc("glGenTextures")
|
||||
glGenVertexArrays = libGLESv2.NewProc("glGenVertexArrays")
|
||||
glGenerateMipmap = libGLESv2.NewProc("glGenerateMipmap")
|
||||
glGetActiveAttrib = libGLESv2.NewProc("glGetActiveAttrib")
|
||||
glGetActiveUniform = libGLESv2.NewProc("glGetActiveUniform")
|
||||
glGetAttachedShaders = libGLESv2.NewProc("glGetAttachedShaders")
|
||||
glGetAttribLocation = libGLESv2.NewProc("glGetAttribLocation")
|
||||
glGetBooleanv = libGLESv2.NewProc("glGetBooleanv")
|
||||
glGetBufferParameteri = libGLESv2.NewProc("glGetBufferParameteri")
|
||||
glGetError = libGLESv2.NewProc("glGetError")
|
||||
glGetFloatv = libGLESv2.NewProc("glGetFloatv")
|
||||
glGetFramebufferAttachmentParameteriv = libGLESv2.NewProc("glGetFramebufferAttachmentParameteriv")
|
||||
glGetIntegerv = libGLESv2.NewProc("glGetIntegerv")
|
||||
glGetProgramInfoLog = libGLESv2.NewProc("glGetProgramInfoLog")
|
||||
glGetProgramiv = libGLESv2.NewProc("glGetProgramiv")
|
||||
glGetRenderbufferParameteriv = libGLESv2.NewProc("glGetRenderbufferParameteriv")
|
||||
glGetShaderInfoLog = libGLESv2.NewProc("glGetShaderInfoLog")
|
||||
glGetShaderPrecisionFormat = libGLESv2.NewProc("glGetShaderPrecisionFormat")
|
||||
glGetShaderSource = libGLESv2.NewProc("glGetShaderSource")
|
||||
glGetShaderiv = libGLESv2.NewProc("glGetShaderiv")
|
||||
glGetString = libGLESv2.NewProc("glGetString")
|
||||
glGetTexParameterfv = libGLESv2.NewProc("glGetTexParameterfv")
|
||||
glGetTexParameteriv = libGLESv2.NewProc("glGetTexParameteriv")
|
||||
glGetUniformLocation = libGLESv2.NewProc("glGetUniformLocation")
|
||||
glGetUniformfv = libGLESv2.NewProc("glGetUniformfv")
|
||||
glGetUniformiv = libGLESv2.NewProc("glGetUniformiv")
|
||||
glGetVertexAttribfv = libGLESv2.NewProc("glGetVertexAttribfv")
|
||||
glGetVertexAttribiv = libGLESv2.NewProc("glGetVertexAttribiv")
|
||||
glHint = libGLESv2.NewProc("glHint")
|
||||
glIsBuffer = libGLESv2.NewProc("glIsBuffer")
|
||||
glIsEnabled = libGLESv2.NewProc("glIsEnabled")
|
||||
glIsFramebuffer = libGLESv2.NewProc("glIsFramebuffer")
|
||||
glIsProgram = libGLESv2.NewProc("glIsProgram")
|
||||
glIsRenderbuffer = libGLESv2.NewProc("glIsRenderbuffer")
|
||||
glIsShader = libGLESv2.NewProc("glIsShader")
|
||||
glIsTexture = libGLESv2.NewProc("glIsTexture")
|
||||
glLineWidth = libGLESv2.NewProc("glLineWidth")
|
||||
glLinkProgram = libGLESv2.NewProc("glLinkProgram")
|
||||
glPixelStorei = libGLESv2.NewProc("glPixelStorei")
|
||||
glPolygonOffset = libGLESv2.NewProc("glPolygonOffset")
|
||||
glReadPixels = libGLESv2.NewProc("glReadPixels")
|
||||
glReleaseShaderCompiler = libGLESv2.NewProc("glReleaseShaderCompiler")
|
||||
glRenderbufferStorage = libGLESv2.NewProc("glRenderbufferStorage")
|
||||
glSampleCoverage = libGLESv2.NewProc("glSampleCoverage")
|
||||
glScissor = libGLESv2.NewProc("glScissor")
|
||||
glShaderSource = libGLESv2.NewProc("glShaderSource")
|
||||
glStencilFunc = libGLESv2.NewProc("glStencilFunc")
|
||||
glStencilFuncSeparate = libGLESv2.NewProc("glStencilFuncSeparate")
|
||||
glStencilMask = libGLESv2.NewProc("glStencilMask")
|
||||
glStencilMaskSeparate = libGLESv2.NewProc("glStencilMaskSeparate")
|
||||
glStencilOp = libGLESv2.NewProc("glStencilOp")
|
||||
glStencilOpSeparate = libGLESv2.NewProc("glStencilOpSeparate")
|
||||
glTexImage2D = libGLESv2.NewProc("glTexImage2D")
|
||||
glTexParameterf = libGLESv2.NewProc("glTexParameterf")
|
||||
glTexParameterfv = libGLESv2.NewProc("glTexParameterfv")
|
||||
glTexParameteri = libGLESv2.NewProc("glTexParameteri")
|
||||
glTexParameteriv = libGLESv2.NewProc("glTexParameteriv")
|
||||
glTexSubImage2D = libGLESv2.NewProc("glTexSubImage2D")
|
||||
glUniform1f = libGLESv2.NewProc("glUniform1f")
|
||||
glUniform1fv = libGLESv2.NewProc("glUniform1fv")
|
||||
glUniform1i = libGLESv2.NewProc("glUniform1i")
|
||||
glUniform1iv = libGLESv2.NewProc("glUniform1iv")
|
||||
glUniform2f = libGLESv2.NewProc("glUniform2f")
|
||||
glUniform2fv = libGLESv2.NewProc("glUniform2fv")
|
||||
glUniform2i = libGLESv2.NewProc("glUniform2i")
|
||||
glUniform2iv = libGLESv2.NewProc("glUniform2iv")
|
||||
glUniform3f = libGLESv2.NewProc("glUniform3f")
|
||||
glUniform3fv = libGLESv2.NewProc("glUniform3fv")
|
||||
glUniform3i = libGLESv2.NewProc("glUniform3i")
|
||||
glUniform3iv = libGLESv2.NewProc("glUniform3iv")
|
||||
glUniform4f = libGLESv2.NewProc("glUniform4f")
|
||||
glUniform4fv = libGLESv2.NewProc("glUniform4fv")
|
||||
glUniform4i = libGLESv2.NewProc("glUniform4i")
|
||||
glUniform4iv = libGLESv2.NewProc("glUniform4iv")
|
||||
glUniformMatrix2fv = libGLESv2.NewProc("glUniformMatrix2fv")
|
||||
glUniformMatrix3fv = libGLESv2.NewProc("glUniformMatrix3fv")
|
||||
glUniformMatrix4fv = libGLESv2.NewProc("glUniformMatrix4fv")
|
||||
glUseProgram = libGLESv2.NewProc("glUseProgram")
|
||||
glValidateProgram = libGLESv2.NewProc("glValidateProgram")
|
||||
glVertexAttrib1f = libGLESv2.NewProc("glVertexAttrib1f")
|
||||
glVertexAttrib1fv = libGLESv2.NewProc("glVertexAttrib1fv")
|
||||
glVertexAttrib2f = libGLESv2.NewProc("glVertexAttrib2f")
|
||||
glVertexAttrib2fv = libGLESv2.NewProc("glVertexAttrib2fv")
|
||||
glVertexAttrib3f = libGLESv2.NewProc("glVertexAttrib3f")
|
||||
glVertexAttrib3fv = libGLESv2.NewProc("glVertexAttrib3fv")
|
||||
glVertexAttrib4f = libGLESv2.NewProc("glVertexAttrib4f")
|
||||
glVertexAttrib4fv = libGLESv2.NewProc("glVertexAttrib4fv")
|
||||
glVertexAttribPointer = libGLESv2.NewProc("glVertexAttribPointer")
|
||||
glViewport = libGLESv2.NewProc("glViewport")
|
||||
)
|
Loading…
Add table
Add a link
Reference in a new issue