| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- from __future__ import unicode_literals, print_function
- import cStringIO
- lines = open("../../../SDL/include/SDL_opengl_glext.h").readlines()
- funcs = ["glShaderSource",
- "glUseProgram",
- "glVertexAttribPointer",
- "glActiveTexture",
- "glEnableVertexAttribArray",
- "glDisableVertexAttribArray",
- "glDeleteProgram",
- "glGetShaderiv",
- "glGetShaderInfoLog",
- "glCreateShader",
- "glCreateProgram",
- "glAttachShader",
- "glCompileShader",
- "glBindAttribLocation",
- "glLinkProgram",
- "glUniform1i",
- "glUniform2fv",
- "glUniform3fv",
- "glUniform4fv",
- "glUniform1f",
- "glUniformMatrix4fv",
- "glBindFramebuffer",
- "glGenFramebuffer",
- "glGenFramebuffers",
- "glCheckFramebufferStatus",
- "glDeleteFramebuffers",
- "glGetUniformLocation",
- "glFramebufferTexture2D",
- "glCompressedTexImage2D",
- "glBindBuffer",
- "glGenBuffers",
- "glBufferData",
- "glDeleteBuffers"
- "glGetProgramInfoLog",
- "glGetProgramiv",
- "glGenerateMipmap",
- "glStencilOpSeparate",
- "glGenRenderbuffers",
- "glBindRenderbuffer",
- "glRenderbufferStorage",
- "glFramebufferRenderbuffer",
- "glDeleteRenderbuffers",
- "glDeleteShader",
- "glDeleteBuffers",
- "glGetProgramInfoLog"
- ]
- # GLAPI void APIENTRY glDeleteProgram (GLuint program);
- # PFNGLDELETEPROGRAMPROC
- base = cStringIO.StringIO()
- defl = cStringIO.StringIO()
- init = cStringIO.StringIO()
- extern = cStringIO.StringIO()
- define = cStringIO.StringIO()
- init.write("""
- void initGLExtensions(myGetProcAdress func)
- {
- if (_glUseProgram)
- return;
- """)
- base.write("""
- extern "C"
- {
- """)
- def get(name):
- shname = name[2:len(name)]
- up = shname.upper()
- proc = "PFNGL" + up + "PROC"
- nm = " " + name + " "
- for l in lines:
- if l.find(nm) != -1:
- st = l
- if 0:
- st = ""
- st = st[0:-2]
- # PFNGLSHADERSOURCEPROC _glShaderSource = 0;
- base.write("%s _%s = 0;\n" % (proc, name))
- # base.write(st + "\n")
- extern.write("extern %s _%s;\n" % (proc, name))
- define.write("#define ox%s DECLARE_GLEXT(%s)\n" % (name, name))
- # extern.write(st + "\n")
- stf = st.replace(name, "def_" + name)
- defl.write(stf + "\n")
- # base.write("{\n")
- defl.write("{")
- args = st[st.find("(") + 1:st.find(")")]
- args = args.split(",")
- allargs = []
- for ar in args:
- sp = ar.split(" ")
- q = sp[-1].split("*")[-1]
- if q == "void":
- continue
- allargs.append(q)
- """
- base.write("\t")
- if not st.startswith("GLAPI void"):
- base.write("return ");
- defl.write("return 0;")
- base.write("_%s(" %(name, ))
- d = ""
- for ar in allargs:
- d += ar + ","
- d = d[0:-1] + ");\n"
- base.write(d)
- base.write("}\n")
- """
- defl.write("}\n")
- init.write("GETFUNC(_%s, def_%s, %s, \"%s\");\n" %
- (name, name, proc, name))
- # st.replace(name, )
- for f in funcs:
- get(f)
- base.write("""
- }
- """)
- print(defl.getvalue())
- print(base.getvalue())
- print(init.getvalue())
- open("res.cpp", "w").write(defl.getvalue() + base.getvalue() + init.getvalue())
- open("res.h", "w").write(extern.getvalue() + define.getvalue())
|