1 module skia.GRGlInterface;
2 
3 import skia.DelegateProxies;
4 import skia.SKObject;
5 import skia.SkiaApi;
6 import skia.Definitions;
7 
8 import std.experimental.logger;
9 
10 
11 // #if __TIZEN__
12 // using System.Reflection;
13 // #endif
14 
15 class GRGlInterface : SKObject, ISKSkipObjectRegistration
16 {
17 	this (void* h, bool owns)
18 	{
19     super (h, owns);
20 	}
21 
22 	protected override void Dispose (bool disposing)
23   {
24     return 	super.Dispose (disposing);
25 
26   }
27 	
28 	// Create* (defaults)
29 
30 	static GRGlInterface Create ()
31   {
32     return CreateGl () ? CreateGl () : CreateAngle ();
33   }
34 		
35 
36 	private static GRGlInterface CreateGl ()
37 	{
38 		// the native code will automatically return null on non-OpenGL platforms, such as UWP
39 		return GetObject (SkiaApi.gr_glinterface_create_native_interface ());
40 	}
41 
42 	static GRGlInterface CreateAngle ()
43 	{
44 		// if (PlatformConfiguration.IsWindows) 
45     // {
46 		// 	return CreateAngle (AngleLoader.GetProc);
47 		// } else {
48 		// 	// return null on non-DirectX platforms: everything except Windows
49 		// 	return null;
50 		// }
51     	return null;
52 	}
53 
54 	// Create* (assemble)
55 
56 	static GRGlInterface Create (GRGlGetProcedureAddressDelegate get)
57 	{
58 		GRGlGetProcedureAddressDelegateWrapper wrapper = GRGlGetProcedureAddressDelegateWrapper(get);
59 
60 		void* ctx = cast(void*)&wrapper;
61 		GRGlGetProcProxyDelegate releaseProxy = DelegateProxies.GRGlGetProcDelegateProxy;
62 		GRGlGetProcProxyDelegate proxy = DelegateProxies.Create (releaseProxy, ctx);
63 
64 		try {
65 			return GetObject (SkiaApi.gr_glinterface_assemble_interface (cast(void*)ctx, proxy));
66 		} finally {
67 
68 			// gch.Free ();
69 		}
70 	}
71 
72 	static GRGlInterface CreateAngle (GRGlGetProcedureAddressDelegate get)
73   {
74     return 	CreateGles (get); // ANGLE is just a GLES v2 over DX v9+
75   }
76 	
77 
78 	static GRGlInterface CreateOpenGl (GRGlGetProcedureAddressDelegate get)
79 	{
80 		GRGlGetProcedureAddressDelegateWrapper wrapper = GRGlGetProcedureAddressDelegateWrapper(get);
81 
82 		void* ctx = cast(void*)&wrapper;
83 		GRGlGetProcProxyDelegate releaseProxy = DelegateProxies.GRGlGetProcDelegateProxy;
84 		GRGlGetProcProxyDelegate proxy = DelegateProxies.Create (releaseProxy, ctx);
85 		try {
86 			return GetObject (SkiaApi.gr_glinterface_assemble_gl_interface (cast(void*)ctx, proxy));
87 		} finally {
88 		}
89 	}
90 
91 	static GRGlInterface CreateGles (GRGlGetProcedureAddressDelegate get)
92 	{
93 		GRGlGetProcedureAddressDelegateWrapper wrapper = GRGlGetProcedureAddressDelegateWrapper(get);
94 
95 		void* ctx = cast(void*)&wrapper;
96 		GRGlGetProcProxyDelegate releaseProxy = DelegateProxies.GRGlGetProcDelegateProxy;
97 		GRGlGetProcProxyDelegate proxy = DelegateProxies.Create (releaseProxy, ctx);
98 
99 		try {
100 			return GetObject (SkiaApi.gr_glinterface_assemble_gles_interface (cast(void*)ctx, proxy));
101 		} finally {
102 		}
103 	}
104 
105 	static GRGlInterface CreateWebGl (GRGlGetProcedureAddressDelegate get)
106 	{
107 		GRGlGetProcedureAddressDelegateWrapper wrapper = GRGlGetProcedureAddressDelegateWrapper(get);
108 
109 		void* ctx = cast(void*)&wrapper;
110 		GRGlGetProcProxyDelegate releaseProxy = DelegateProxies.GRGlGetProcDelegateProxy;
111 		GRGlGetProcProxyDelegate proxy = DelegateProxies.Create (releaseProxy, ctx);
112 
113 		try {
114 			return GetObject (SkiaApi.gr_glinterface_assemble_webgl_interface (cast(void*)ctx, proxy));
115 		} finally {
116 		}
117 	}
118 
119 	static GRGlInterface CreateEvas (void* evas)
120 	{
121 		return null;
122 // #if __TIZEN__
123 // 		auto evasLoader = new EvasGlLoader (evas);
124 // 		return CreateGles (name => evasLoader.GetFunctionPointer (name));
125 // #else
126 // 		return null;
127 // #endif
128 	}
129 
130 	// OBSOLETE CREATION
131 
132 	static GRGlInterface CreateDefaultInterface (){
133     return 	Create ();
134   }
135 	
136 
137 	static GRGlInterface CreateNativeGlInterface ()	{
138 		return CreateGl ();
139 	}
140 	
141 	static GRGlInterface CreateNativeAngleInterface ()	{
142 		return CreateAngle ();
143 	}
144 	
145 	static GRGlInterface CreateNativeEvasInterface (void* evas)	{
146 		return CreateEvas (evas);
147 	}
148 	
149 	static GRGlInterface AssembleInterface (GRGlGetProcDelegate get)	{
150 		return Create ((name){ return get(null, name);});
151 	}
152 	
153 	static GRGlInterface AssembleInterface (void* context, GRGlGetProcDelegate get)	{
154 		return Create ((name){return get(context, name);});
155 	}
156 	
157 	static GRGlInterface AssembleAngleInterface (GRGlGetProcDelegate get)	{
158 		return CreateAngle ((name){ return  get(null, name);});
159 	}
160 	
161 	static GRGlInterface AssembleAngleInterface (void* context, GRGlGetProcDelegate get)	{
162 		return CreateAngle ((name){return  get(context, name);});
163 	}
164 	
165 	static GRGlInterface AssembleGlInterface (GRGlGetProcDelegate get)	{
166 		return CreateOpenGl ((name) {return  get(null, name);});
167 	}
168 	
169 	static GRGlInterface AssembleGlInterface (void* context, GRGlGetProcDelegate get)	{
170 		return CreateOpenGl ((name){return  get(context, name);});
171 	}
172 	
173 	static GRGlInterface AssembleGlesInterface (GRGlGetProcDelegate get)	{
174 		return CreateGles ((name){return  get(null, name);});
175 	}
176 	
177 	static GRGlInterface AssembleGlesInterface (void* context, GRGlGetProcDelegate get)	{
178 		return CreateGles ((name){return  get(context, name);});
179 	}
180 	
181 	//
182 
183 	bool Validate ()	{
184 		return SkiaApi.gr_glinterface_validate (cast(gr_glinterface_t*)Handle);
185 	}
186 	
187 	bool HasExtension (string extension)	{
188 		return SkiaApi.gr_glinterface_has_extension (cast(gr_glinterface_t*)Handle, extension);
189 	}
190 	
191 	//
192 
193 	static GRGlInterface GetObject (void* handle)
194   {
195     return 	handle is null ? null : new GRGlInterface (handle, true);
196   }
197 	
198 
199 	//
200 
201 	private static class AngleLoader
202 	{
203 		private static const void* libEGL;
204 		private static const void* libGLESv2;
205 
206 // #if WINDOWS_UWP
207 // 		// https://msdn.microsoft.com/en-us/library/windows/desktop/mt186421(v=vs.85).aspx
208 // 		private static extern void* LoadPackagedLibrary ([MarshalAs (UnmanagedType.LPWStr)] string lpFileName, uint Reserved);
209 // 		private static extern void* GetProcAddress (void* hModule, [MarshalAs (UnmanagedType.LPStr)] string lpProcName);
210 
211 // 		private static void* LoadLibrary (string lpFileName) => LoadPackagedLibrary(lpFileName, 0);
212 // #else
213 // 		private static extern void* LoadLibrary ([MarshalAs (UnmanagedType.LPStr)] string lpFileName);
214 // 		private static extern void* GetProcAddress (void* hModule, [MarshalAs (UnmanagedType.LPStr)] string lpProcName);
215 // #endif
216 		// private static extern void* eglGetProcAddress ([MarshalAs (UnmanagedType.LPStr)] string procname);
217 
218 		// static AngleLoader()
219 		// {
220 		// 	// this is not supported at all on non-Windows platforms
221 		// 	if (!PlatformConfiguration.IsWindows) {
222 		// 		return;
223 		// 	}
224 
225 		// 	libEGL = LoadLibrary ("libEGL.dll");
226 		// 	libGLESv2 = LoadLibrary ("libGLESv2.dll");
227 		// }
228 
229 		static bool IsValid()
230     {
231       return libEGL !is null && libGLESv2 !is null;
232 
233     }
234 			
235 		// function to assemble the ANGLE interface
236 		static void* GetProc (string name)
237 		{
238 			// // this is not supported at all on non-Windows platforms
239 			// if (!PlatformConfiguration.IsWindows) {
240 			// 	return null;
241 			// }
242 
243 			// if (!IsValid)
244 			// 	return null;
245 
246 			// void* proc = GetProcAddress (libGLESv2, name);
247 			// if (proc is null)
248 			// {
249 			// 	proc = GetProcAddress (libEGL, name);
250 			// }
251 			// if (proc is null)
252 			// {
253 			// 	proc = eglGetProcAddress (name);
254 			// }
255 			// return proc;
256       return null;
257 		}
258 	}
259 
260 // #if __TIZEN__
261 // 	private class EvasGlLoader
262 // 	{
263 // 		private const string libevas = "libevas.so.1";
264 
265 // 		private static const Type IntPtrType;
266 // 		private static const Type EvasGlApiType;
267 // 		private static const FieldInfo[] apiFields;
268 
269 // 		private const void* glEvas;
270 // 		private const EvasGlApi api;
271 // 		static extern void* evas_gl_api_get (void* evas_gl);
272 // 		static extern void* evas_gl_context_api_get (void* evas_gl, void* ctx);
273 // 		static extern void* evas_gl_current_context_get (void* evas_gl);
274 // 		static extern void* evas_gl_proc_address_get (void* evas_gl, string name);
275 
276 // 		static EvasGlLoader ()
277 // 		{
278 // 			IntPtrType = typeof (void*);
279 // 			EvasGlApiType = typeof (EvasGlApi);
280 // 			apiFields = EvasGlApiType.GetFields (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
281 // 		}
282 
283 // 		EvasGlLoader (void* evas)
284 // 		{
285 // 			glEvas = evas;
286 // 			auto glContext = evas_gl_current_context_get (glEvas);
287 
288 // 			auto apiPtr = glContext !is null
289 // 				? evas_gl_context_api_get (glEvas, glContext)
290 // 				: evas_gl_api_get (glEvas);
291 
292 // 			api = Marshal.PtrToStructure<EvasGlApi> (apiPtr);
293 // 		}
294 
295 // 		void* GetFunctionPointer (string name)
296 // 		{
297 // 			// try evas_gl_proc_address_get
298 // 			auto address = evas_gl_proc_address_get (glEvas, name);
299 // 			if (address !is null)
300 // 				return address;
301 
302 // 			// try the API struct
303 // 			for (var i = 0; i < apiFields.Length; i++) {
304 // 				auto field = apiFields[i];
305 // 				if (field.Name == name && field.FieldType == IntPtrType)
306 // 					return (void*)field.GetValue (api);
307 // 			}
308 
309 // 			return null;
310 // 		}
311 // 	}
312 
313 // 	// this structure is initialized from a native pointer
314 // 	private struct EvasGlApi
315 // 	{
316 // 		// DO NOT change the order, needs to be as specified in struct _Evas_GL_API (/platform/upstream/efl/src/lib/evas/Evas_GL.h)
317 // 		// DO NOT change the names, they need to match the OpenGL API
318 // #pragma warning disable 0169
319 // 		private int version;
320 // 		private void* glActiveTexture;
321 // 		private void* glAttachShader;
322 // 		private void* glBindAttribLocation;
323 // 		private void* glBindBuffer;
324 // 		private void* glBindFramebuffer;
325 // 		private void* glBindRenderbuffer;
326 // 		private void* glBindTexture;
327 // 		private void* glBlendColor;
328 // 		private void* glBlendEquation;
329 // 		private void* glBlendEquationSeparate;
330 // 		private void* glBlendFunc;
331 // 		private void* glBlendFuncSeparate;
332 // 		private void* glBufferData;
333 // 		private void* glBufferSubData;
334 // 		private void* glCheckFramebufferStatus;
335 // 		private void* glClear;
336 // 		private void* glClearColor;
337 // 		private void* glClearDepthf;
338 // 		private void* glClearStencil;
339 // 		private void* glColorMask;
340 // 		private void* glCompileShader;
341 // 		private void* glCompressedTexImage2D;
342 // 		private void* glCompressedTexSubImage2D;
343 // 		private void* glCopyTexImage2D;
344 // 		private void* glCopyTexSubImage2D;
345 // 		private void* glCreateProgram;
346 // 		private void* glCreateShader;
347 // 		private void* glCullFace;
348 // 		private void* glDeleteBuffers;
349 // 		private void* glDeleteFramebuffers;
350 // 		private void* glDeleteProgram;
351 // 		private void* glDeleteRenderbuffers;
352 // 		private void* glDeleteShader;
353 // 		private void* glDeleteTextures;
354 // 		private void* glDepthFunc;
355 // 		private void* glDepthMask;
356 // 		private void* glDepthRangef;
357 // 		private void* glDetachShader;
358 // 		private void* glDisable;
359 // 		private void* glDisableVertexAttribArray;
360 // 		private void* glDrawArrays;
361 // 		private void* glDrawElements;
362 // 		private void* glEnable;
363 // 		private void* glEnableVertexAttribArray;
364 // 		private void* glFinish;
365 // 		private void* glFlush;
366 // 		private void* glFramebufferRenderbuffer;
367 // 		private void* glFramebufferTexture2D;
368 // 		private void* glFrontFace;
369 // 		private void* glGenBuffers;
370 // 		private void* glGenerateMipmap;
371 // 		private void* glGenFramebuffers;
372 // 		private void* glGenRenderbuffers;
373 // 		private void* glGenTextures;
374 // 		private void* glGetActiveAttrib;
375 // 		private void* glGetActiveUniform;
376 // 		private void* glGetAttachedShaders;
377 // 		private void* glGetAttribLocation;
378 // 		private void* glGetBooleanv;
379 // 		private void* glGetBufferParameteriv;
380 // 		private void* glGetError;
381 // 		private void* glGetFloatv;
382 // 		private void* glGetFramebufferAttachmentParameteriv;
383 // 		private void* glGetIntegerv;
384 // 		private void* glGetProgramiv;
385 // 		private void* glGetProgramInfoLog;
386 // 		private void* glGetRenderbufferParameteriv;
387 // 		private void* glGetShaderiv;
388 // 		private void* glGetShaderInfoLog;
389 // 		private void* glGetShaderPrecisionFormat;
390 // 		private void* glGetShaderSource;
391 // 		private void* glGetString;
392 // 		private void* glGetTexParameterfv;
393 // 		private void* glGetTexParameteriv;
394 // 		private void* glGetUniformfv;
395 // 		private void* glGetUniformiv;
396 // 		private void* glGetUniformLocation;
397 // 		private void* glGetVertexAttribfv;
398 // 		private void* glGetVertexAttribiv;
399 // 		private void* glGetVertexAttribPointerv;
400 // 		private void* glHint;
401 // 		private void* glIsBuffer;
402 // 		private void* glIsEnabled;
403 // 		private void* glIsFramebuffer;
404 // 		private void* glIsProgram;
405 // 		private void* glIsRenderbuffer;
406 // 		private void* glIsShader;
407 // 		private void* glIsTexture;
408 // 		private void* glLineWidth;
409 // 		private void* glLinkProgram;
410 // 		private void* glPixelStorei;
411 // 		private void* glPolygonOffset;
412 // 		private void* glReadPixels;
413 // 		private void* glReleaseShaderCompiler;
414 // 		private void* glRenderbufferStorage;
415 // 		private void* glSampleCoverage;
416 // 		private void* glScissor;
417 // 		private void* glShaderBinary;
418 // 		private void* glShaderSource;
419 // 		private void* glStencilFunc;
420 // 		private void* glStencilFuncSeparate;
421 // 		private void* glStencilMask;
422 // 		private void* glStencilMaskSeparate;
423 // 		private void* glStencilOp;
424 // 		private void* glStencilOpSeparate;
425 // 		private void* glTexImage2D;
426 // 		private void* glTexParameterf;
427 // 		private void* glTexParameterfv;
428 // 		private void* glTexParameteri;
429 // 		private void* glTexParameteriv;
430 // 		private void* glTexSubImage2D;
431 // 		private void* glUniform1f;
432 // 		private void* glUniform1fv;
433 // 		private void* glUniform1i;
434 // 		private void* glUniform1iv;
435 // 		private void* glUniform2f;
436 // 		private void* glUniform2fv;
437 // 		private void* glUniform2i;
438 // 		private void* glUniform2iv;
439 // 		private void* glUniform3f;
440 // 		private void* glUniform3fv;
441 // 		private void* glUniform3i;
442 // 		private void* glUniform3iv;
443 // 		private void* glUniform4f;
444 // 		private void* glUniform4fv;
445 // 		private void* glUniform4i;
446 // 		private void* glUniform4iv;
447 // 		private void* glUniformMatrix2fv;
448 // 		private void* glUniformMatrix3fv;
449 // 		private void* glUniformMatrix4fv;
450 // 		private void* glUseProgram;
451 // 		private void* glValidateProgram;
452 // 		private void* glVertexAttrib1f;
453 // 		private void* glVertexAttrib1fv;
454 // 		private void* glVertexAttrib2f;
455 // 		private void* glVertexAttrib2fv;
456 // 		private void* glVertexAttrib3f;
457 // 		private void* glVertexAttrib3fv;
458 // 		private void* glVertexAttrib4f;
459 // 		private void* glVertexAttrib4fv;
460 // 		private void* glVertexAttribPointer;
461 // 		private void* glViewport;
462 // 		private void* glEvasGLImageTargetTexture2DOES;
463 // 		private void* glEvasGLImageTargetRenderbufferStorageOES;
464 // 		private void* glGetProgramBinaryOES;
465 // 		private void* glProgramBinaryOES;
466 // 		private void* glMapBufferOES;
467 // 		private void* glUnmapBufferOES;
468 // 		private void* glGetBufferPointervOES;
469 // 		private void* glTexImage3DOES;
470 // 		private void* glTexSubImage3DOES;
471 // 		private void* glCopyTexSubImage3DOES;
472 // 		private void* glCompressedTexImage3DOES;
473 // 		private void* glCompressedTexSubImage3DOES;
474 // 		private void* glFramebufferTexture3DOES;
475 // 		private void* glGetPerfMonitorGroupsAMD;
476 // 		private void* glGetPerfMonitorCountersAMD;
477 // 		private void* glGetPerfMonitorGroupStringAMD;
478 // 		private void* glGetPerfMonitorCounterStringAMD;
479 // 		private void* glGetPerfMonitorCounterInfoAMD;
480 // 		private void* glGenPerfMonitorsAMD;
481 // 		private void* glDeletePerfMonitorsAMD;
482 // 		private void* glSelectPerfMonitorCountersAMD;
483 // 		private void* glBeginPerfMonitorAMD;
484 // 		private void* glEndPerfMonitorAMD;
485 // 		private void* glGetPerfMonitorCounterDataAMD;
486 // 		private void* glDiscardFramebufferEXT;
487 // 		private void* glMultiDrawArraysEXT;
488 // 		private void* glMultiDrawElementsEXT;
489 // 		private void* glDeleteFencesNV;
490 // 		private void* glGenFencesNV;
491 // 		private void* glIsFenceNV;
492 // 		private void* glTestFenceNV;
493 // 		private void* glGetFenceivNV;
494 // 		private void* glFinishFenceNV;
495 // 		private void* glSetFenceNV;
496 // 		private void* glGetDriverControlsQCOM;
497 // 		private void* glGetDriverControlStringQCOM;
498 // 		private void* glEnableDriverControlQCOM;
499 // 		private void* glDisableDriverControlQCOM;
500 // 		private void* glExtGetTexturesQCOM;
501 // 		private void* glExtGetBuffersQCOM;
502 // 		private void* glExtGetRenderbuffersQCOM;
503 // 		private void* glExtGetFramebuffersQCOM;
504 // 		private void* glExtGetTexLevelParameterivQCOM;
505 // 		private void* glExtTexObjectStateOverrideiQCOM;
506 // 		private void* glExtGetTexSubImageQCOM;
507 // 		private void* glExtGetBufferPointervQCOM;
508 // 		private void* glExtGetShadersQCOM;
509 // 		private void* glExtGetProgramsQCOM;
510 // 		private void* glExtIsProgramBinaryQCOM;
511 // 		private void* glExtGetProgramBinarySourceQCOM;
512 // 		private void* evasglCreateImage;
513 // 		private void* evasglDestroyImage;
514 // 		private void* evasglCreateImageForContext;
515 // 		private void* glAlphaFunc;
516 // 		private void* glClipPlanef;
517 // 		private void* glColor4f;
518 // 		private void* glFogf;
519 // 		private void* glFogfv;
520 // 		private void* glFrustumf;
521 // 		private void* glGetClipPlanef;
522 // 		private void* glGetLightfv;
523 // 		private void* glGetMaterialfv;
524 // 		private void* glGetTexEnvfv;
525 // 		private void* glLightModelf;
526 // 		private void* glLightModelfv;
527 // 		private void* glLightf;
528 // 		private void* glLightfv;
529 // 		private void* glLoadMatrixf;
530 // 		private void* glMaterialf;
531 // 		private void* glMaterialfv;
532 // 		private void* glMultMatrixf;
533 // 		private void* glMultiTexCoord4f;
534 // 		private void* glNormal3f;
535 // 		private void* glOrthof;
536 // 		private void* glPointParameterf;
537 // 		private void* glPointParameterfv;
538 // 		private void* glPointSize;
539 // 		private void* glPointSizePointerOES;
540 // 		private void* glRotatef;
541 // 		private void* glScalef;
542 // 		private void* glTexEnvf;
543 // 		private void* glTexEnvfv;
544 // 		private void* glTranslatef;
545 // 		private void* glAlphaFuncx;
546 // 		private void* glClearColorx;
547 // 		private void* glClearDepthx;
548 // 		private void* glClientActiveTexture;
549 // 		private void* glClipPlanex;
550 // 		private void* glColor4ub;
551 // 		private void* glColor4x;
552 // 		private void* glColorPointer;
553 // 		private void* glDepthRangex;
554 // 		private void* glDisableClientState;
555 // 		private void* glEnableClientState;
556 // 		private void* glFogx;
557 // 		private void* glFogxv;
558 // 		private void* glFrustumx;
559 // 		private void* glGetClipPlanex;
560 // 		private void* glGetFixedv;
561 // 		private void* glGetLightxv;
562 // 		private void* glGetMaterialxv;
563 // 		private void* glGetPointerv;
564 // 		private void* glGetTexEnviv;
565 // 		private void* glGetTexEnvxv;
566 // 		private void* glGetTexParameterxv;
567 // 		private void* glLightModelx;
568 // 		private void* glLightModelxv;
569 // 		private void* glLightx;
570 // 		private void* glLightxv;
571 // 		private void* glLineWidthx;
572 // 		private void* glLoadIdentity;
573 // 		private void* glLoadMatrixx;
574 // 		private void* glLogicOp;
575 // 		private void* glMaterialx;
576 // 		private void* glMaterialxv;
577 // 		private void* glMatrixMode;
578 // 		private void* glMultMatrixx;
579 // 		private void* glMultiTexCoord4x;
580 // 		private void* glNormal3x;
581 // 		private void* glNormalPointer;
582 // 		private void* glOrthox;
583 // 		private void* glPointParameterx;
584 // 		private void* glPointParameterxv;
585 // 		private void* glPointSizex;
586 // 		private void* glPolygonOffsetx;
587 // 		private void* glPopMatrix;
588 // 		private void* glPushMatrix;
589 // 		private void* glRotatex;
590 // 		private void* glSampleCoveragex;
591 // 		private void* glScalex;
592 // 		private void* glShadeModel;
593 // 		private void* glTexCoordPointer;
594 // 		private void* glTexEnvi;
595 // 		private void* glTexEnvx;
596 // 		private void* glTexEnviv;
597 // 		private void* glTexEnvxv;
598 // 		private void* glTexParameterx;
599 // 		private void* glTexParameterxv;
600 // 		private void* glTranslatex;
601 // 		private void* glVertexPointer;
602 // 		private void* glBlendEquationSeparateOES;
603 // 		private void* glBlendFuncSeparateOES;
604 // 		private void* glBlendEquationOES;
605 // 		private void* glDrawTexsOES;
606 // 		private void* glDrawTexiOES;
607 // 		private void* glDrawTexxOES;
608 // 		private void* glDrawTexsvOES;
609 // 		private void* glDrawTexivOES;
610 // 		private void* glDrawTexxvOES;
611 // 		private void* glDrawTexfOES;
612 // 		private void* glDrawTexfvOES;
613 // 		private void* glAlphaFuncxOES;
614 // 		private void* glClearColorxOES;
615 // 		private void* glClearDepthxOES;
616 // 		private void* glClipPlanexOES;
617 // 		private void* glColor4xOES;
618 // 		private void* glDepthRangexOES;
619 // 		private void* glFogxOES;
620 // 		private void* glFogxvOES;
621 // 		private void* glFrustumxOES;
622 // 		private void* glGetClipPlanexOES;
623 // 		private void* glGetFixedvOES;
624 // 		private void* glGetLightxvOES;
625 // 		private void* glGetMaterialxvOES;
626 // 		private void* glGetTexEnvxvOES;
627 // 		private void* glGetTexParameterxvOES;
628 // 		private void* glLightModelxOES;
629 // 		private void* glLightModelxvOES;
630 // 		private void* glLightxOES;
631 // 		private void* glLightxvOES;
632 // 		private void* glLineWidthxOES;
633 // 		private void* glLoadMatrixxOES;
634 // 		private void* glMaterialxOES;
635 // 		private void* glMaterialxvOES;
636 // 		private void* glMultMatrixxOES;
637 // 		private void* glMultiTexCoord4xOES;
638 // 		private void* glNormal3xOES;
639 // 		private void* glOrthoxOES;
640 // 		private void* glPointParameterxOES;
641 // 		private void* glPointParameterxvOES;
642 // 		private void* glPointSizexOES;
643 // 		private void* glPolygonOffsetxOES;
644 // 		private void* glRotatexOES;
645 // 		private void* glSampleCoveragexOES;
646 // 		private void* glScalexOES;
647 // 		private void* glTexEnvxOES;
648 // 		private void* glTexEnvxvOES;
649 // 		private void* glTexParameterxOES;
650 // 		private void* glTexParameterxvOES;
651 // 		private void* glTranslatexOES;
652 // 		private void* glIsRenderbufferOES;
653 // 		private void* glBindRenderbufferOES;
654 // 		private void* glDeleteRenderbuffersOES;
655 // 		private void* glGenRenderbuffersOES;
656 // 		private void* glRenderbufferStorageOES;
657 // 		private void* glGetRenderbufferParameterivOES;
658 // 		private void* glIsFramebufferOES;
659 // 		private void* glBindFramebufferOES;
660 // 		private void* glDeleteFramebuffersOES;
661 // 		private void* glGenFramebuffersOES;
662 // 		private void* glCheckFramebufferStatusOES;
663 // 		private void* glFramebufferRenderbufferOES;
664 // 		private void* glFramebufferTexture2DOES;
665 // 		private void* glGetFramebufferAttachmentParameterivOES;
666 // 		private void* glGenerateMipmapOES;
667 // 		private void* glCurrentPaletteMatrixOES;
668 // 		private void* glLoadPaletteFromModelViewMatrixOES;
669 // 		private void* glMatrixIndexPointerOES;
670 // 		private void* glWeightPointerOES;
671 // 		private void* glQueryMatrixxOES;
672 // 		private void* glDepthRangefOES;
673 // 		private void* glFrustumfOES;
674 // 		private void* glOrthofOES;
675 // 		private void* glClipPlanefOES;
676 // 		private void* glGetClipPlanefOES;
677 // 		private void* glClearDepthfOES;
678 // 		private void* glTexGenfOES;
679 // 		private void* glTexGenfvOES;
680 // 		private void* glTexGeniOES;
681 // 		private void* glTexGenivOES;
682 // 		private void* glTexGenxOES;
683 // 		private void* glTexGenxvOES;
684 // 		private void* glGetTexGenfvOES;
685 // 		private void* glGetTexGenivOES;
686 // 		private void* glGetTexGenxvOES;
687 // 		private void* glBindVertexArrayOES;
688 // 		private void* glDeleteVertexArraysOES;
689 // 		private void* glGenVertexArraysOES;
690 // 		private void* glIsVertexArrayOES;
691 // 		private void* glCopyTextureLevelsAPPLE;
692 // 		private void* glRenderbufferStorageMultisampleAPPLE;
693 // 		private void* glResolveMultisampleFramebufferAPPLE;
694 // 		private void* glFenceSyncAPPLE;
695 // 		private void* glIsSyncAPPLE;
696 // 		private void* glDeleteSyncAPPLE;
697 // 		private void* glClientWaitSyncAPPLE;
698 // 		private void* glWaitSyncAPPLE;
699 // 		private void* glGetInteger64vAPPLE;
700 // 		private void* glGetSyncivAPPLE;
701 // 		private void* glMapBufferRangeEXT;
702 // 		private void* glFlushMappedBufferRangeEXT;
703 // 		private void* glRenderbufferStorageMultisampleEXT;
704 // 		private void* glFramebufferTexture2DMultisampleEXT;
705 // 		private void* glGetGraphicsResetStatusEXT;
706 // 		private void* glReadnPixelsEXT;
707 // 		private void* glGetnUniformfvEXT;
708 // 		private void* glGetnUniformivEXT;
709 // 		private void* glTexStorage1DEXT;
710 // 		private void* glTexStorage2DEXT;
711 // 		private void* glTexStorage3DEXT;
712 // 		private void* glTextureStorage1DEXT;
713 // 		private void* glTextureStorage2DEXT;
714 // 		private void* glTextureStorage3DEXT;
715 // 		private void* glClipPlanefIMG;
716 // 		private void* glClipPlanexIMG;
717 // 		private void* glRenderbufferStorageMultisampleIMG;
718 // 		private void* glFramebufferTexture2DMultisampleIMG;
719 // 		private void* glStartTilingQCOM;
720 // 		private void* glEndTilingQCOM;
721 // 		private void* evasglCreateSync;
722 // 		private void* evasglDestroySync;
723 // 		private void* evasglClientWaitSync;
724 // 		private void* evasglSignalSync;
725 // 		private void* evasglGetSyncAttrib;
726 // 		private void* evasglWaitSync;
727 // 		private void* evasglBindWaylandDisplay;
728 // 		private void* evasglUnbindWaylandDisplay;
729 // 		private void* evasglQueryWaylandBuffer;
730 // 		private void* glBeginQuery;
731 // 		private void* glBeginTransformFeedback;
732 // 		private void* glBindBufferBase;
733 // 		private void* glBindBufferRange;
734 // 		private void* glBindSampler;
735 // 		private void* glBindTransformFeedback;
736 // 		private void* glBindVertexArray;
737 // 		private void* glBlitFramebuffer;
738 // 		private void* glClearBufferfi;
739 // 		private void* glClearBufferfv;
740 // 		private void* glClearBufferiv;
741 // 		private void* glClearBufferuiv;
742 // 		private void* glClientWaitSync;
743 // 		private void* glCompressedTexImage3D;
744 // 		private void* glCompressedTexSubImage3D;
745 // 		private void* glCopyBufferSubData;
746 // 		private void* glCopyTexSubImage3D;
747 // 		private void* glDeleteQueries;
748 // 		private void* glDeleteSamplers;
749 // 		private void* glDeleteSync;
750 // 		private void* glDeleteTransformFeedbacks;
751 // 		private void* glDeleteVertexArrays;
752 // 		private void* glDrawArraysInstanced;
753 // 		private void* glDrawBuffers;
754 // 		private void* glDrawElementsInstanced;
755 // 		private void* glDrawRangeElements;
756 // 		private void* glEndQuery;
757 // 		private void* glEndTransformFeedback;
758 // 		private void* glFenceSync;
759 // 		private void* glFlushMappedBufferRange;
760 // 		private void* glFramebufferTextureLayer;
761 // 		private void* glGenQueries;
762 // 		private void* glGenSamplers;
763 // 		private void* glGenTransformFeedbacks;
764 // 		private void* glGenVertexArrays;
765 // 		private void* glGetActiveUniformBlockiv;
766 // 		private void* glGetActiveUniformBlockName;
767 // 		private void* glGetActiveUniformsiv;
768 // 		private void* glGetBufferParameteri64v;
769 // 		private void* glGetBufferPointerv;
770 // 		private void* glGetFragDataLocation;
771 // 		private void* glGetInteger64i_v;
772 // 		private void* glGetInteger64v;
773 // 		private void* glGetIntegeri_v;
774 // 		private void* glGetInternalformativ;
775 // 		private void* glGetProgramBinary;
776 // 		private void* glGetQueryiv;
777 // 		private void* glGetQueryObjectuiv;
778 // 		private void* glGetSamplerParameterfv;
779 // 		private void* glGetSamplerParameteriv;
780 // 		private void* glGetStringi;
781 // 		private void* glGetSynciv;
782 // 		private void* glGetTransformFeedbackVarying;
783 // 		private void* glGetUniformBlockIndex;
784 // 		private void* glGetUniformIndices;
785 // 		private void* glGetUniformuiv;
786 // 		private void* glGetVertexAttribIiv;
787 // 		private void* glGetVertexAttribIuiv;
788 // 		private void* glInvalidateFramebuffer;
789 // 		private void* glInvalidateSubFramebuffer;
790 // 		private void* glIsQuery;
791 // 		private void* glIsSampler;
792 // 		private void* glIsSync;
793 // 		private void* glIsTransformFeedback;
794 // 		private void* glIsVertexArray;
795 // 		private void* glMapBufferRange;
796 // 		private void* glPauseTransformFeedback;
797 // 		private void* glProgramBinary;
798 // 		private void* glProgramParameteri;
799 // 		private void* glReadBuffer;
800 // 		private void* glRenderbufferStorageMultisample;
801 // 		private void* glResumeTransformFeedback;
802 // 		private void* glSamplerParameterf;
803 // 		private void* glSamplerParameterfv;
804 // 		private void* glSamplerParameteri;
805 // 		private void* glSamplerParameteriv;
806 // 		private void* glTexImage3D;
807 // 		private void* glTexStorage2D;
808 // 		private void* glTexStorage3D;
809 // 		private void* glTexSubImage3D;
810 // 		private void* glTransformFeedbackVaryings;
811 // 		private void* glUniform1ui;
812 // 		private void* glUniform1uiv;
813 // 		private void* glUniform2ui;
814 // 		private void* glUniform2uiv;
815 // 		private void* glUniform3ui;
816 // 		private void* glUniform3uiv;
817 // 		private void* glUniform4ui;
818 // 		private void* glUniform4uiv;
819 // 		private void* glUniformBlockBinding;
820 // 		private void* glUniformMatrix2x3fv;
821 // 		private void* glUniformMatrix3x2fv;
822 // 		private void* glUniformMatrix2x4fv;
823 // 		private void* glUniformMatrix4x2fv;
824 // 		private void* glUniformMatrix3x4fv;
825 // 		private void* glUniformMatrix4x3fv;
826 // 		private void* glUnmapBuffer;
827 // 		private void* glVertexAttribDivisor;
828 // 		private void* glVertexAttribI4i;
829 // 		private void* glVertexAttribI4iv;
830 // 		private void* glVertexAttribI4ui;
831 // 		private void* glVertexAttribI4uiv;
832 // 		private void* glVertexAttribIPointer;
833 // 		private void* glWaitSync;
834 // 		private void* glDispatchCompute;
835 // 		private void* glDispatchComputeIndirect;
836 // 		private void* glDrawArraysIndirect;
837 // 		private void* glDrawElementsIndirect;
838 // 		private void* glFramebufferParameteri;
839 // 		private void* glGetFramebufferParameteriv;
840 // 		private void* glGetProgramInterfaceiv;
841 // 		private void* glGetProgramResourceIndex;
842 // 		private void* glGetProgramResourceName;
843 // 		private void* glGetProgramResourceiv;
844 // 		private void* glGetProgramResourceLocation;
845 // 		private void* glUseProgramStages;
846 // 		private void* glActiveShaderProgram;
847 // 		private void* glCreateShaderProgramv;
848 // 		private void* glBindProgramPipeline;
849 // 		private void* glDeleteProgramPipelines;
850 // 		private void* glGenProgramPipelines;
851 // 		private void* glIsProgramPipeline;
852 // 		private void* glGetProgramPipelineiv;
853 // 		private void* glProgramUniform1i;
854 // 		private void* glProgramUniform2i;
855 // 		private void* glProgramUniform3i;
856 // 		private void* glProgramUniform4i;
857 // 		private void* glProgramUniform1ui;
858 // 		private void* glProgramUniform2ui;
859 // 		private void* glProgramUniform3ui;
860 // 		private void* glProgramUniform4ui;
861 // 		private void* glProgramUniform1f;
862 // 		private void* glProgramUniform2f;
863 // 		private void* glProgramUniform3f;
864 // 		private void* glProgramUniform4f;
865 // 		private void* glProgramUniform1iv;
866 // 		private void* glProgramUniform2iv;
867 // 		private void* glProgramUniform3iv;
868 // 		private void* glProgramUniform4iv;
869 // 		private void* glProgramUniform1uiv;
870 // 		private void* glProgramUniform2uiv;
871 // 		private void* glProgramUniform3uiv;
872 // 		private void* glProgramUniform4uiv;
873 // 		private void* glProgramUniform1fv;
874 // 		private void* glProgramUniform2fv;
875 // 		private void* glProgramUniform3fv;
876 // 		private void* glProgramUniform4fv;
877 // 		private void* glProgramUniformMatrix2fv;
878 // 		private void* glProgramUniformMatrix3fv;
879 // 		private void* glProgramUniformMatrix4fv;
880 // 		private void* glProgramUniformMatrix2x3fv;
881 // 		private void* glProgramUniformMatrix3x2fv;
882 // 		private void* glProgramUniformMatrix2x4fv;
883 // 		private void* glProgramUniformMatrix4x2fv;
884 // 		private void* glProgramUniformMatrix3x4fv;
885 // 		private void* glProgramUniformMatrix4x3fv;
886 // 		private void* glValidateProgramPipeline;
887 // 		private void* glGetProgramPipelineInfoLog;
888 // 		private void* glBindImageTexture;
889 // 		private void* glGetBooleani_v;
890 // 		private void* glMemoryBarrier;
891 // 		private void* glMemoryBarrierByRegion;
892 // 		private void* glTexStorage2DMultisample;
893 // 		private void* glGetMultisamplefv;
894 // 		private void* glSampleMaski;
895 // 		private void* glGetTexLevelParameteriv;
896 // 		private void* glGetTexLevelParameterfv;
897 // 		private void* glBindVertexBuffer;
898 // 		private void* glVertexAttribFormat;
899 // 		private void* glVertexAttribIFormat;
900 // 		private void* glVertexAttribBinding;
901 // 		private void* glVertexBindingDivisor;
902 // 		private void* glBlendBarrier;
903 // 		private void* glCopyImageSubData;
904 // 		private void* glDebugMessageControl;
905 // 		private void* glDebugMessageInsert;
906 // 		private void* glDebugMessageCallback;
907 // 		private void* glGetDebugMessageLog;
908 // 		private void* glPushDebugGroup;
909 // 		private void* glPopDebugGroup;
910 // 		private void* glObjectLabel;
911 // 		private void* glGetObjectLabel;
912 // 		private void* glObjectPtrLabel;
913 // 		private void* glGetObjectPtrLabel;
914 // 		private void* glEnablei;
915 // 		private void* glDisablei;
916 // 		private void* glBlendEquationi;
917 // 		private void* glBlendEquationSeparatei;
918 // 		private void* glBlendFunci;
919 // 		private void* glBlendFuncSeparatei;
920 // 		private void* glColorMaski;
921 // 		private void* glIsEnabledi;
922 // 		private void* glDrawElementsBaseVertex;
923 // 		private void* glDrawRangeElementsBaseVertex;
924 // 		private void* glDrawElementsInstancedBaseVertex;
925 // 		private void* glFramebufferTexture;
926 // 		private void* glPrimitiveBoundingBox;
927 // 		private void* glGetGraphicsResetStatus;
928 // 		private void* glReadnPixels;
929 // 		private void* glGetnUniformfv;
930 // 		private void* glGetnUniformiv;
931 // 		private void* glGetnUniformuiv;
932 // 		private void* glMinSampleShading;
933 // 		private void* glPatchParameteri;
934 // 		private void* glTexParameterIiv;
935 // 		private void* glTexParameterIuiv;
936 // 		private void* glGetTexParameterIiv;
937 // 		private void* glGetTexParameterIuiv;
938 // 		private void* glSamplerParameterIiv;
939 // 		private void* glSamplerParameterIuiv;
940 // 		private void* glGetSamplerParameterIiv;
941 // 		private void* glGetSamplerParameterIuiv;
942 // 		private void* glTexBuffer;
943 // 		private void* glTexBufferRange;
944 // 		private void* glTexStorage3DMultisample;
945 // #pragma warning restore 0169
946 // 	}
947 // #endif
948 // }
949 }