using System; using System.Collections.Generic; using System.Linq; using GLenum = System.UInt32; using GLboolean = System.Byte ; using GLbitfield = System.UInt32; using GLvoid = System.Void ; using GLbyte = System.SByte ; using GLshort = System.Int16 ; using GLint = System.Int32 ; using GLubyte = System.Byte ; using GLushort = System.UInt16; using GLuint = System.UInt32; using GLsizei = System.Int32 ; using GLfloat = System.Single; using GLclampf = System.Single; using GLdouble = System.Double; using GLclampd = System.Double; using GLchar = System.SByte ; namespace PoroCYon.FNAGLSL { public static unsafe partial class GL { public const GLenum COMPILE_STATUS = 0x8B81, INFO_LOG_LENGTH = 0x8B84, LINK_STATUS = 0x8B82; static void InitProcs() { _GetError = GetProcAddress>("GetError"); _CreateProgram = GetProcAddress>("CreateProgram"); _CreateShader = GetProcAddress>("CreateShader"); _ShaderSource = GetProcAddress>("ShaderSource"); _CompileShader = GetProcAddress>("CompileShader"); _GetShaderiv = GetProcAddress>("GetShaderiv"); _GetShaderInfoLog = GetProcAddress>("GetShaderInfoLog"); _AttachShader = GetProcAddress>("AttachShader"); _LinkProgram = GetProcAddress>("LinkProgram"); _GetProgramiv = GetProcAddress>("GetProgramiv"); _GetProgramInfoLog = GetProcAddress>("GetProgramInfoLog"); _DeleteShader = GetProcAddress>("DeleteShader"); _DeleteProgram = GetProcAddress>("DeleteProgram"); } static void DeinitProcs() { _GetError = null; _CreateProgram = null; _CreateShader = null; _ShaderSource = null; _CompileShader = null; _GetShaderiv = null; _GetShaderInfoLog = null; _AttachShader = null; _LinkProgram = null; _GetProgramiv = null; _GetProgramInfoLog = null; _DeleteShader = null; _DeleteProgram = null; } static Func _GetError; public static GLError GetError() => (GLError)_GetError(); static Func _CreateProgram; public static GLuint CreateProgram() => _CreateProgram(); static Func _CreateShader; public static GLuint CreateShader(GLSLPurpose shtyp) => _CreateShader((GLenum)shtyp); static Action _ShaderSource; public static void ShaderSource(GLuint sh, GLsizei count, GLchar** str, GLint* len) { _ShaderSource(sh, count, (IntPtr)str, (IntPtr)len); } static Action _CompileShader; public static void CompileShader(GLuint sh) { _CompileShader(sh); } static Action _GetShaderiv; public static GLint GetShaderiv(GLuint sh, GLenum pname) { GLint* parm = stackalloc GLint[1]; *parm = 0; _GetShaderiv(sh, pname, (IntPtr)parm); return *parm; } static Action _GetShaderInfoLog; public static void GetShaderInfoLog(GLuint sh, GLsizei maxl, GLsizei* len, GLchar* infolog) { _GetShaderInfoLog(sh, maxl, (IntPtr)len, (IntPtr)infolog); } static Action _AttachShader; public static void AttachShader(GLuint prgm, GLuint sh) { _AttachShader(prgm, sh); } static Action _LinkProgram; public static void LinkProgram(GLuint prgm) { _LinkProgram(prgm); } static Action _GetProgramiv; // FIXME: won't work with GL_COMPUTE_WORK_GROUP_SIZE public static GLint GetProgramiv(GLuint prgm, GLenum pname) { GLint* parm = stackalloc GLint[3]; parm[2] = parm[1] = parm[0] = 0; _GetProgramiv(prgm, pname, (IntPtr)parm); return parm[0]; } static Action _GetProgramInfoLog; public static void GetProgramInfoLog(GLuint prgm, GLsizei maxl, GLsizei* len, GLchar* infolog) { _GetProgramInfoLog(prgm, maxl, (IntPtr)len, (IntPtr)infolog); } static Action _DeleteShader; public static void DeleteShader(GLuint sh) { _DeleteShader(sh); } static Action _DeleteProgram; public static void DeleteProgram(GLuint prgm) { _DeleteProgram(prgm); } } }