| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #!/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",
- "glDetachShader",
- "glBindAttribLocation",
- "glLinkProgram",
- "glUniform1i",
- "glUniform2f",
- "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",
- "glBlendEquation",
- "glBlendFuncSeparate",
- "glBlendEquationSeparate",
- "glGetAttribLocation",
- ]
- # GLAPI void APIENTRY glDeleteProgram (GLuint program);
- # PFNGLDELETEPROGRAMPROC
- base = cStringIO.StringIO()
- defl = cStringIO.StringIO()
- init = cStringIO.StringIO()
- extern = cStringIO.StringIO()
- define = cStringIO.StringIO()
- 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("{")
- if "void " not in stf:
- defl.write("return 0;")
- 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)
- print(defl.getvalue())
- print(base.getvalue())
- print(init.getvalue())
- def replace(src, block_begin, block_end, data):
- start = src.find(block_begin) + len(block_begin) + 1
- end = src.find(block_end)
- src = src[0:start] + data + src[end:]
- return src
- HEADER = "../../oxygine/src/core/gl/oxgl.h"
- CPP = "../../oxygine/src/core/gl/oxgl.cpp"
- header = open(HEADER, "r").read()
- cpp = open(CPP, "r").read()
- header = replace(header, "//!--pfngl-begin--!", "//!--pfngl-end--!", extern.getvalue())
- header = replace(header, "//!--oxgl-begin--!", "//!--oxgl-end--!", define.getvalue())
- cpp = replace(cpp, "//!--defgl-begin--!", "//!--defgl-end--!", defl.getvalue())
- cpp = replace(cpp, "//!--_gl-begin--!", "//!--_gl-end--!", base.getvalue())
- cpp = replace(cpp, "//!--getfunc-begin--!", "//!--getfunc-end--!", init.getvalue())
- open(HEADER, "w").write(header)
- open(CPP, "w").write(cpp)
|