gl_windows.go raw
1 // SPDX-License-Identifier: Unlicense OR MIT
2
3 package gl
4
5 import (
6 "math"
7 "runtime"
8 "syscall"
9 "unsafe"
10
11 "golang.org/x/sys/windows"
12 )
13
14 var (
15 LibGLESv2 = windows.NewLazyDLL("libGLESv2.dll")
16 _glActiveTexture = LibGLESv2.NewProc("glActiveTexture")
17 _glAttachShader = LibGLESv2.NewProc("glAttachShader")
18 _glBeginQuery = LibGLESv2.NewProc("glBeginQuery")
19 _glBindAttribLocation = LibGLESv2.NewProc("glBindAttribLocation")
20 _glBindBuffer = LibGLESv2.NewProc("glBindBuffer")
21 _glBindBufferBase = LibGLESv2.NewProc("glBindBufferBase")
22 _glBindFramebuffer = LibGLESv2.NewProc("glBindFramebuffer")
23 _glBindRenderbuffer = LibGLESv2.NewProc("glBindRenderbuffer")
24 _glBindTexture = LibGLESv2.NewProc("glBindTexture")
25 _glBlendEquation = LibGLESv2.NewProc("glBlendEquation")
26 _glBlendFunc = LibGLESv2.NewProc("glBlendFunc")
27 _glBufferData = LibGLESv2.NewProc("glBufferData")
28 _glBufferSubData = LibGLESv2.NewProc("glBufferSubData")
29 _glCheckFramebufferStatus = LibGLESv2.NewProc("glCheckFramebufferStatus")
30 _glClear = LibGLESv2.NewProc("glClear")
31 _glClearColor = LibGLESv2.NewProc("glClearColor")
32 _glClearDepthf = LibGLESv2.NewProc("glClearDepthf")
33 _glDeleteQueries = LibGLESv2.NewProc("glDeleteQueries")
34 _glCompileShader = LibGLESv2.NewProc("glCompileShader")
35 _glGenBuffers = LibGLESv2.NewProc("glGenBuffers")
36 _glGenFramebuffers = LibGLESv2.NewProc("glGenFramebuffers")
37 _glGetUniformBlockIndex = LibGLESv2.NewProc("glGetUniformBlockIndex")
38 _glCreateProgram = LibGLESv2.NewProc("glCreateProgram")
39 _glGenRenderbuffers = LibGLESv2.NewProc("glGenRenderbuffers")
40 _glCreateShader = LibGLESv2.NewProc("glCreateShader")
41 _glGenTextures = LibGLESv2.NewProc("glGenTextures")
42 _glDeleteBuffers = LibGLESv2.NewProc("glDeleteBuffers")
43 _glDeleteFramebuffers = LibGLESv2.NewProc("glDeleteFramebuffers")
44 _glDeleteProgram = LibGLESv2.NewProc("glDeleteProgram")
45 _glDeleteShader = LibGLESv2.NewProc("glDeleteShader")
46 _glDeleteRenderbuffers = LibGLESv2.NewProc("glDeleteRenderbuffers")
47 _glDeleteTextures = LibGLESv2.NewProc("glDeleteTextures")
48 _glDepthFunc = LibGLESv2.NewProc("glDepthFunc")
49 _glDepthMask = LibGLESv2.NewProc("glDepthMask")
50 _glDisableVertexAttribArray = LibGLESv2.NewProc("glDisableVertexAttribArray")
51 _glDisable = LibGLESv2.NewProc("glDisable")
52 _glDrawArrays = LibGLESv2.NewProc("glDrawArrays")
53 _glDrawElements = LibGLESv2.NewProc("glDrawElements")
54 _glEnable = LibGLESv2.NewProc("glEnable")
55 _glEnableVertexAttribArray = LibGLESv2.NewProc("glEnableVertexAttribArray")
56 _glEndQuery = LibGLESv2.NewProc("glEndQuery")
57 _glFinish = LibGLESv2.NewProc("glFinish")
58 _glFramebufferRenderbuffer = LibGLESv2.NewProc("glFramebufferRenderbuffer")
59 _glFramebufferTexture2D = LibGLESv2.NewProc("glFramebufferTexture2D")
60 _glGenQueries = LibGLESv2.NewProc("glGenQueries")
61 _glGetError = LibGLESv2.NewProc("glGetError")
62 _glGetRenderbufferParameteri = LibGLESv2.NewProc("glGetRenderbufferParameteri")
63 _glGetFramebufferAttachmentParameteri = LibGLESv2.NewProc("glGetFramebufferAttachmentParameteri")
64 _glGetIntegerv = LibGLESv2.NewProc("glGetIntegerv")
65 _glGetProgramiv = LibGLESv2.NewProc("glGetProgramiv")
66 _glGetProgramInfoLog = LibGLESv2.NewProc("glGetProgramInfoLog")
67 _glGetQueryObjectuiv = LibGLESv2.NewProc("glGetQueryObjectuiv")
68 _glGetShaderiv = LibGLESv2.NewProc("glGetShaderiv")
69 _glGetShaderInfoLog = LibGLESv2.NewProc("glGetShaderInfoLog")
70 _glGetString = LibGLESv2.NewProc("glGetString")
71 _glGetUniformLocation = LibGLESv2.NewProc("glGetUniformLocation")
72 _glInvalidateFramebuffer = LibGLESv2.NewProc("glInvalidateFramebuffer")
73 _glLinkProgram = LibGLESv2.NewProc("glLinkProgram")
74 _glPixelStorei = LibGLESv2.NewProc("glPixelStorei")
75 _glReadPixels = LibGLESv2.NewProc("glReadPixels")
76 _glRenderbufferStorage = LibGLESv2.NewProc("glRenderbufferStorage")
77 _glScissor = LibGLESv2.NewProc("glScissor")
78 _glShaderSource = LibGLESv2.NewProc("glShaderSource")
79 _glTexImage2D = LibGLESv2.NewProc("glTexImage2D")
80 _glTexStorage2D = LibGLESv2.NewProc("glTexStorage2D")
81 _glTexSubImage2D = LibGLESv2.NewProc("glTexSubImage2D")
82 _glTexParameteri = LibGLESv2.NewProc("glTexParameteri")
83 _glUniformBlockBinding = LibGLESv2.NewProc("glUniformBlockBinding")
84 _glUniform1f = LibGLESv2.NewProc("glUniform1f")
85 _glUniform1i = LibGLESv2.NewProc("glUniform1i")
86 _glUniform2f = LibGLESv2.NewProc("glUniform2f")
87 _glUniform3f = LibGLESv2.NewProc("glUniform3f")
88 _glUniform4f = LibGLESv2.NewProc("glUniform4f")
89 _glUseProgram = LibGLESv2.NewProc("glUseProgram")
90 _glVertexAttribPointer = LibGLESv2.NewProc("glVertexAttribPointer")
91 _glViewport = LibGLESv2.NewProc("glViewport")
92 )
93
94 type Functions struct {
95 // Query caches.
96 int32s [100]int32
97 }
98
99 type Context interface{}
100
101 func NewFunctions(ctx Context) (*Functions, error) {
102 if ctx != nil {
103 panic("non-nil context")
104 }
105 return new(Functions), nil
106 }
107
108 func (c *Functions) ActiveTexture(t Enum) {
109 syscall.Syscall(_glActiveTexture.Addr(), 1, uintptr(t), 0, 0)
110 }
111 func (c *Functions) AttachShader(p Program, s Shader) {
112 syscall.Syscall(_glAttachShader.Addr(), 2, uintptr(p.V), uintptr(s.V), 0)
113 }
114 func (f *Functions) BeginQuery(target Enum, query Query) {
115 syscall.Syscall(_glBeginQuery.Addr(), 2, uintptr(target), uintptr(query.V), 0)
116 }
117 func (c *Functions) BindAttribLocation(p Program, a Attrib, name string) {
118 cname := cString(name)
119 c0 := &cname[0]
120 syscall.Syscall(_glBindAttribLocation.Addr(), 3, uintptr(p.V), uintptr(a), uintptr(unsafe.Pointer(c0)))
121 issue34474KeepAlive(c)
122 }
123 func (c *Functions) BindBuffer(target Enum, b Buffer) {
124 syscall.Syscall(_glBindBuffer.Addr(), 2, uintptr(target), uintptr(b.V), 0)
125 }
126 func (c *Functions) BindBufferBase(target Enum, index int, b Buffer) {
127 syscall.Syscall(_glBindBufferBase.Addr(), 3, uintptr(target), uintptr(index), uintptr(b.V))
128 }
129 func (c *Functions) BindFramebuffer(target Enum, fb Framebuffer) {
130 syscall.Syscall(_glBindFramebuffer.Addr(), 2, uintptr(target), uintptr(fb.V), 0)
131 }
132 func (c *Functions) BindRenderbuffer(target Enum, rb Renderbuffer) {
133 syscall.Syscall(_glBindRenderbuffer.Addr(), 2, uintptr(target), uintptr(rb.V), 0)
134 }
135 func (f *Functions) BindImageTexture(unit int, t Texture, level int, layered bool, layer int, access, format Enum) {
136 panic("not implemented")
137 }
138 func (c *Functions) BindTexture(target Enum, t Texture) {
139 syscall.Syscall(_glBindTexture.Addr(), 2, uintptr(target), uintptr(t.V), 0)
140 }
141 func (c *Functions) BlendEquation(mode Enum) {
142 syscall.Syscall(_glBlendEquation.Addr(), 1, uintptr(mode), 0, 0)
143 }
144 func (c *Functions) BlendFunc(sfactor, dfactor Enum) {
145 syscall.Syscall(_glBlendFunc.Addr(), 2, uintptr(sfactor), uintptr(dfactor), 0)
146 }
147 func (f *Functions) BlitFramebuffer(sx0, sy0, sx1, sy1, dx0, dy0, dx1, dy1 int, mask Enum, filter Enum) {
148 panic("not implemented")
149 }
150 func (c *Functions) BufferData(target Enum, size int, usage Enum) {
151 syscall.Syscall6(_glBufferData.Addr(), 4, uintptr(target), uintptr(size), 0, uintptr(usage), 0, 0)
152 }
153 func (f *Functions) BufferSubData(target Enum, offset int, src []byte) {
154 if n := len(src); n > 0 {
155 s0 := &src[0]
156 syscall.Syscall6(_glBufferSubData.Addr(), 4, uintptr(target), uintptr(offset), uintptr(n), uintptr(unsafe.Pointer(s0)), 0, 0)
157 issue34474KeepAlive(s0)
158 }
159 }
160 func (c *Functions) CheckFramebufferStatus(target Enum) Enum {
161 s, _, _ := syscall.Syscall(_glCheckFramebufferStatus.Addr(), 1, uintptr(target), 0, 0)
162 return Enum(s)
163 }
164 func (c *Functions) Clear(mask Enum) {
165 syscall.Syscall(_glClear.Addr(), 1, uintptr(mask), 0, 0)
166 }
167 func (c *Functions) ClearColor(red, green, blue, alpha float32) {
168 syscall.Syscall6(_glClearColor.Addr(), 4, uintptr(math.Float32bits(red)), uintptr(math.Float32bits(green)), uintptr(math.Float32bits(blue)), uintptr(math.Float32bits(alpha)), 0, 0)
169 }
170 func (c *Functions) ClearDepthf(d float32) {
171 syscall.Syscall(_glClearDepthf.Addr(), 1, uintptr(math.Float32bits(d)), 0, 0)
172 }
173 func (c *Functions) CompileShader(s Shader) {
174 syscall.Syscall(_glCompileShader.Addr(), 1, uintptr(s.V), 0, 0)
175 }
176 func (c *Functions) CreateBuffer() Buffer {
177 var buf uintptr
178 syscall.Syscall(_glGenBuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&buf)), 0)
179 return Buffer{uint(buf)}
180 }
181 func (c *Functions) CreateFramebuffer() Framebuffer {
182 var fb uintptr
183 syscall.Syscall(_glGenFramebuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&fb)), 0)
184 return Framebuffer{uint(fb)}
185 }
186 func (c *Functions) CreateProgram() Program {
187 p, _, _ := syscall.Syscall(_glCreateProgram.Addr(), 0, 0, 0, 0)
188 return Program{uint(p)}
189 }
190 func (f *Functions) CreateQuery() Query {
191 var q uintptr
192 syscall.Syscall(_glGenQueries.Addr(), 2, 1, uintptr(unsafe.Pointer(&q)), 0)
193 return Query{uint(q)}
194 }
195 func (c *Functions) CreateRenderbuffer() Renderbuffer {
196 var rb uintptr
197 syscall.Syscall(_glGenRenderbuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&rb)), 0)
198 return Renderbuffer{uint(rb)}
199 }
200 func (c *Functions) CreateShader(ty Enum) Shader {
201 s, _, _ := syscall.Syscall(_glCreateShader.Addr(), 1, uintptr(ty), 0, 0)
202 return Shader{uint(s)}
203 }
204 func (c *Functions) CreateTexture() Texture {
205 var t uintptr
206 syscall.Syscall(_glGenTextures.Addr(), 2, 1, uintptr(unsafe.Pointer(&t)), 0)
207 return Texture{uint(t)}
208 }
209 func (c *Functions) DeleteBuffer(v Buffer) {
210 syscall.Syscall(_glDeleteBuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&v)), 0)
211 }
212 func (c *Functions) DeleteFramebuffer(v Framebuffer) {
213 syscall.Syscall(_glDeleteFramebuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&v.V)), 0)
214 }
215 func (c *Functions) DeleteProgram(p Program) {
216 syscall.Syscall(_glDeleteProgram.Addr(), 1, uintptr(p.V), 0, 0)
217 }
218 func (f *Functions) DeleteQuery(query Query) {
219 syscall.Syscall(_glDeleteQueries.Addr(), 2, 1, uintptr(unsafe.Pointer(&query.V)), 0)
220 }
221 func (c *Functions) DeleteShader(s Shader) {
222 syscall.Syscall(_glDeleteShader.Addr(), 1, uintptr(s.V), 0, 0)
223 }
224 func (c *Functions) DeleteRenderbuffer(v Renderbuffer) {
225 syscall.Syscall(_glDeleteRenderbuffers.Addr(), 2, 1, uintptr(unsafe.Pointer(&v.V)), 0)
226 }
227 func (c *Functions) DeleteTexture(v Texture) {
228 syscall.Syscall(_glDeleteTextures.Addr(), 2, 1, uintptr(unsafe.Pointer(&v.V)), 0)
229 }
230 func (c *Functions) DepthFunc(f Enum) {
231 syscall.Syscall(_glDepthFunc.Addr(), 1, uintptr(f), 0, 0)
232 }
233 func (c *Functions) DepthMask(mask bool) {
234 var m uintptr
235 if mask {
236 m = 1
237 }
238 syscall.Syscall(_glDepthMask.Addr(), 1, m, 0, 0)
239 }
240 func (c *Functions) DisableVertexAttribArray(a Attrib) {
241 syscall.Syscall(_glDisableVertexAttribArray.Addr(), 1, uintptr(a), 0, 0)
242 }
243 func (c *Functions) Disable(cap Enum) {
244 syscall.Syscall(_glDisable.Addr(), 1, uintptr(cap), 0, 0)
245 }
246 func (c *Functions) DrawArrays(mode Enum, first, count int) {
247 syscall.Syscall(_glDrawArrays.Addr(), 3, uintptr(mode), uintptr(first), uintptr(count))
248 }
249 func (c *Functions) DrawElements(mode Enum, count int, ty Enum, offset int) {
250 syscall.Syscall6(_glDrawElements.Addr(), 4, uintptr(mode), uintptr(count), uintptr(ty), uintptr(offset), 0, 0)
251 }
252 func (f *Functions) DispatchCompute(x, y, z int) {
253 panic("not implemented")
254 }
255 func (c *Functions) Enable(cap Enum) {
256 syscall.Syscall(_glEnable.Addr(), 1, uintptr(cap), 0, 0)
257 }
258 func (c *Functions) EnableVertexAttribArray(a Attrib) {
259 syscall.Syscall(_glEnableVertexAttribArray.Addr(), 1, uintptr(a), 0, 0)
260 }
261 func (f *Functions) EndQuery(target Enum) {
262 syscall.Syscall(_glEndQuery.Addr(), 1, uintptr(target), 0, 0)
263 }
264 func (c *Functions) Finish() {
265 syscall.Syscall(_glFinish.Addr(), 0, 0, 0, 0)
266 }
267 func (c *Functions) FramebufferRenderbuffer(target, attachment, renderbuffertarget Enum, renderbuffer Renderbuffer) {
268 syscall.Syscall6(_glFramebufferRenderbuffer.Addr(), 4, uintptr(target), uintptr(attachment), uintptr(renderbuffertarget), uintptr(renderbuffer.V), 0, 0)
269 }
270 func (c *Functions) FramebufferTexture2D(target, attachment, texTarget Enum, t Texture, level int) {
271 syscall.Syscall6(_glFramebufferTexture2D.Addr(), 5, uintptr(target), uintptr(attachment), uintptr(texTarget), uintptr(t.V), uintptr(level), 0)
272 }
273 func (f *Functions) GetUniformBlockIndex(p Program, name string) uint {
274 cname := cString(name)
275 c0 := &cname[0]
276 u, _, _ := syscall.Syscall(_glGetUniformBlockIndex.Addr(), 2, uintptr(p.V), uintptr(unsafe.Pointer(c0)), 0)
277 issue34474KeepAlive(c0)
278 return uint(u)
279 }
280 func (c *Functions) GetBinding(pname Enum) Object {
281 return Object{uint(c.GetInteger(pname))}
282 }
283 func (c *Functions) GetError() Enum {
284 e, _, _ := syscall.Syscall(_glGetError.Addr(), 0, 0, 0, 0)
285 return Enum(e)
286 }
287 func (c *Functions) GetRenderbufferParameteri(target, pname Enum) int {
288 p, _, _ := syscall.Syscall(_glGetRenderbufferParameteri.Addr(), 2, uintptr(target), uintptr(pname), 0)
289 return int(p)
290 }
291 func (c *Functions) GetFramebufferAttachmentParameteri(target, attachment, pname Enum) int {
292 p, _, _ := syscall.Syscall(_glGetFramebufferAttachmentParameteri.Addr(), 3, uintptr(target), uintptr(attachment), uintptr(pname))
293 return int(p)
294 }
295 func (c *Functions) GetInteger(pname Enum) int {
296 syscall.Syscall(_glGetIntegerv.Addr(), 2, uintptr(pname), uintptr(unsafe.Pointer(&c.int32s[0])), 0)
297 return int(c.int32s[0])
298 }
299 func (c *Functions) GetProgrami(p Program, pname Enum) int {
300 syscall.Syscall(_glGetProgramiv.Addr(), 3, uintptr(p.V), uintptr(pname), uintptr(unsafe.Pointer(&c.int32s[0])))
301 return int(c.int32s[0])
302 }
303 func (c *Functions) GetProgramInfoLog(p Program) string {
304 n := c.GetProgrami(p, INFO_LOG_LENGTH)
305 buf := make([]byte, n)
306 syscall.Syscall6(_glGetProgramInfoLog.Addr(), 4, uintptr(p.V), uintptr(len(buf)), 0, uintptr(unsafe.Pointer(&buf[0])), 0, 0)
307 return string(buf)
308 }
309 func (c *Functions) GetQueryObjectuiv(query Query, pname Enum) uint {
310 syscall.Syscall(_glGetQueryObjectuiv.Addr(), 3, uintptr(query.V), uintptr(pname), uintptr(unsafe.Pointer(&c.int32s[0])))
311 return uint(c.int32s[0])
312 }
313 func (c *Functions) GetShaderi(s Shader, pname Enum) int {
314 syscall.Syscall(_glGetShaderiv.Addr(), 3, uintptr(s.V), uintptr(pname), uintptr(unsafe.Pointer(&c.int32s[0])))
315 return int(c.int32s[0])
316 }
317 func (c *Functions) GetShaderInfoLog(s Shader) string {
318 n := c.GetShaderi(s, INFO_LOG_LENGTH)
319 buf := make([]byte, n)
320 syscall.Syscall6(_glGetShaderInfoLog.Addr(), 4, uintptr(s.V), uintptr(len(buf)), 0, uintptr(unsafe.Pointer(&buf[0])), 0, 0)
321 return string(buf)
322 }
323 func (c *Functions) GetString(pname Enum) string {
324 s, _, _ := syscall.Syscall(_glGetString.Addr(), 1, uintptr(pname), 0, 0)
325 return windows.BytePtrToString((*byte)(unsafe.Pointer(s)))
326 }
327 func (c *Functions) GetUniformLocation(p Program, name string) Uniform {
328 cname := cString(name)
329 c0 := &cname[0]
330 u, _, _ := syscall.Syscall(_glGetUniformLocation.Addr(), 2, uintptr(p.V), uintptr(unsafe.Pointer(c0)), 0)
331 issue34474KeepAlive(c0)
332 return Uniform{int(u)}
333 }
334 func (c *Functions) InvalidateFramebuffer(target, attachment Enum) {
335 addr := _glInvalidateFramebuffer.Addr()
336 if addr == 0 {
337 // InvalidateFramebuffer is just a hint. Skip it if not supported.
338 return
339 }
340 syscall.Syscall(addr, 3, uintptr(target), 1, uintptr(unsafe.Pointer(&attachment)))
341 }
342 func (c *Functions) LinkProgram(p Program) {
343 syscall.Syscall(_glLinkProgram.Addr(), 1, uintptr(p.V), 0, 0)
344 }
345 func (c *Functions) PixelStorei(pname Enum, param int32) {
346 syscall.Syscall(_glPixelStorei.Addr(), 2, uintptr(pname), uintptr(param), 0)
347 }
348 func (f *Functions) MemoryBarrier(barriers Enum) {
349 panic("not implemented")
350 }
351 func (f *Functions) MapBufferRange(target Enum, offset, length int, access Enum) []byte {
352 panic("not implemented")
353 }
354 func (f *Functions) ReadPixels(x, y, width, height int, format, ty Enum, data []byte) {
355 d0 := &data[0]
356 syscall.Syscall9(_glReadPixels.Addr(), 7, uintptr(x), uintptr(y), uintptr(width), uintptr(height), uintptr(format), uintptr(ty), uintptr(unsafe.Pointer(d0)), 0, 0)
357 issue34474KeepAlive(d0)
358 }
359 func (c *Functions) RenderbufferStorage(target, internalformat Enum, width, height int) {
360 syscall.Syscall6(_glRenderbufferStorage.Addr(), 4, uintptr(target), uintptr(internalformat), uintptr(width), uintptr(height), 0, 0)
361 }
362 func (c *Functions) Scissor(x, y, width, height int32) {
363 syscall.Syscall6(_glScissor.Addr(), 4, uintptr(x), uintptr(y), uintptr(width), uintptr(height), 0, 0)
364 }
365 func (c *Functions) ShaderSource(s Shader, src string) {
366 var n uintptr = uintptr(len(src))
367 psrc := &src
368 syscall.Syscall6(_glShaderSource.Addr(), 4, uintptr(s.V), 1, uintptr(unsafe.Pointer(psrc)), uintptr(unsafe.Pointer(&n)), 0, 0)
369 issue34474KeepAlive(psrc)
370 }
371 func (f *Functions) TexImage2D(target Enum, level int, internalFormat Enum, width int, height int, format Enum, ty Enum) {
372 syscall.Syscall9(_glTexImage2D.Addr(), 9, uintptr(target), uintptr(level), uintptr(internalFormat), uintptr(width), uintptr(height), 0, uintptr(format), uintptr(ty), 0)
373 }
374 func (f *Functions) TexStorage2D(target Enum, levels int, internalFormat Enum, width, height int) {
375 syscall.Syscall6(_glTexStorage2D.Addr(), 5, uintptr(target), uintptr(levels), uintptr(internalFormat), uintptr(width), uintptr(height), 0)
376 }
377 func (c *Functions) TexSubImage2D(target Enum, level int, x, y, width, height int, format, ty Enum, data []byte) {
378 d0 := &data[0]
379 syscall.Syscall9(_glTexSubImage2D.Addr(), 9, uintptr(target), uintptr(level), uintptr(x), uintptr(y), uintptr(width), uintptr(height), uintptr(format), uintptr(ty), uintptr(unsafe.Pointer(d0)))
380 issue34474KeepAlive(d0)
381 }
382 func (c *Functions) TexParameteri(target, pname Enum, param int) {
383 syscall.Syscall(_glTexParameteri.Addr(), 3, uintptr(target), uintptr(pname), uintptr(param))
384 }
385 func (f *Functions) UniformBlockBinding(p Program, uniformBlockIndex uint, uniformBlockBinding uint) {
386 syscall.Syscall(_glUniformBlockBinding.Addr(), 3, uintptr(p.V), uintptr(uniformBlockIndex), uintptr(uniformBlockBinding))
387 }
388 func (c *Functions) Uniform1f(dst Uniform, v float32) {
389 syscall.Syscall(_glUniform1f.Addr(), 2, uintptr(dst.V), uintptr(math.Float32bits(v)), 0)
390 }
391 func (c *Functions) Uniform1i(dst Uniform, v int) {
392 syscall.Syscall(_glUniform1i.Addr(), 2, uintptr(dst.V), uintptr(v), 0)
393 }
394 func (c *Functions) Uniform2f(dst Uniform, v0, v1 float32) {
395 syscall.Syscall(_glUniform2f.Addr(), 3, uintptr(dst.V), uintptr(math.Float32bits(v0)), uintptr(math.Float32bits(v1)))
396 }
397 func (c *Functions) Uniform3f(dst Uniform, v0, v1, v2 float32) {
398 syscall.Syscall6(_glUniform3f.Addr(), 4, uintptr(dst.V), uintptr(math.Float32bits(v0)), uintptr(math.Float32bits(v1)), uintptr(math.Float32bits(v2)), 0, 0)
399 }
400 func (c *Functions) Uniform4f(dst Uniform, v0, v1, v2, v3 float32) {
401 syscall.Syscall6(_glUniform4f.Addr(), 5, uintptr(dst.V), uintptr(math.Float32bits(v0)), uintptr(math.Float32bits(v1)), uintptr(math.Float32bits(v2)), uintptr(math.Float32bits(v3)), 0)
402 }
403 func (c *Functions) UseProgram(p Program) {
404 syscall.Syscall(_glUseProgram.Addr(), 1, uintptr(p.V), 0, 0)
405 }
406 func (f *Functions) UnmapBuffer(target Enum) bool {
407 panic("not implemented")
408 }
409 func (c *Functions) VertexAttribPointer(dst Attrib, size int, ty Enum, normalized bool, stride, offset int) {
410 var norm uintptr
411 if normalized {
412 norm = 1
413 }
414 syscall.Syscall6(_glVertexAttribPointer.Addr(), 6, uintptr(dst), uintptr(size), uintptr(ty), norm, uintptr(stride), uintptr(offset))
415 }
416 func (c *Functions) Viewport(x, y, width, height int) {
417 syscall.Syscall6(_glViewport.Addr(), 4, uintptr(x), uintptr(y), uintptr(width), uintptr(height), 0, 0)
418 }
419
420 func cString(s string) []byte {
421 b := make([]byte, len(s)+1)
422 copy(b, s)
423 return b
424 }
425
426 // issue34474KeepAlive calls runtime.KeepAlive as a
427 // workaround for golang.org/issue/34474.
428 func issue34474KeepAlive(v interface{}) {
429 runtime.KeepAlive(v)
430 }
431