genfn.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from __future__ import unicode_literals, print_function
  4. import cStringIO
  5. lines = open("../../../SDL/include/SDL_opengl_glext.h").readlines()
  6. funcs = ["glShaderSource",
  7. "glUseProgram",
  8. "glVertexAttribPointer",
  9. "glActiveTexture",
  10. "glEnableVertexAttribArray",
  11. "glDisableVertexAttribArray",
  12. "glDeleteProgram",
  13. "glGetShaderiv",
  14. "glGetShaderInfoLog",
  15. "glCreateShader",
  16. "glCreateProgram",
  17. "glAttachShader",
  18. "glCompileShader",
  19. "glDetachShader",
  20. "glBindAttribLocation",
  21. "glLinkProgram",
  22. "glUniform1i",
  23. "glUniform2f",
  24. "glUniform2fv",
  25. "glUniform3fv",
  26. "glUniform4fv",
  27. "glUniform1f",
  28. "glUniformMatrix4fv",
  29. "glBindFramebuffer",
  30. "glGenFramebuffer",
  31. "glGenFramebuffers",
  32. "glCheckFramebufferStatus",
  33. "glDeleteFramebuffers",
  34. "glGetUniformLocation",
  35. "glFramebufferTexture2D",
  36. "glCompressedTexImage2D",
  37. "glBindBuffer",
  38. "glGenBuffers",
  39. "glBufferData",
  40. "glDeleteBuffers"
  41. "glGetProgramInfoLog",
  42. "glGetProgramiv",
  43. "glGenerateMipmap",
  44. "glStencilOpSeparate",
  45. "glGenRenderbuffers",
  46. "glBindRenderbuffer",
  47. "glRenderbufferStorage",
  48. "glFramebufferRenderbuffer",
  49. "glDeleteRenderbuffers",
  50. "glDeleteShader",
  51. "glDeleteBuffers",
  52. "glGetProgramInfoLog",
  53. "glBlendEquation",
  54. "glBlendFuncSeparate",
  55. "glBlendEquationSeparate",
  56. "glGetAttribLocation",
  57. ]
  58. # GLAPI void APIENTRY glDeleteProgram (GLuint program);
  59. # PFNGLDELETEPROGRAMPROC
  60. base = cStringIO.StringIO()
  61. defl = cStringIO.StringIO()
  62. init = cStringIO.StringIO()
  63. extern = cStringIO.StringIO()
  64. define = cStringIO.StringIO()
  65. def get(name):
  66. shname = name[2:len(name)]
  67. up = shname.upper()
  68. proc = "PFNGL" + up + "PROC"
  69. nm = " " + name + " "
  70. for l in lines:
  71. if l.find(nm) != -1:
  72. st = l
  73. if 0:
  74. st = ""
  75. st = st[0:-2]
  76. # PFNGLSHADERSOURCEPROC _glShaderSource = 0;
  77. base.write("%s _%s = 0;\n" % (proc, name))
  78. # base.write(st + "\n")
  79. extern.write("extern %s _%s;\n" % (proc, name))
  80. define.write("#define ox%s DECLARE_GLEXT(%s)\n" % (name, name))
  81. # extern.write(st + "\n")
  82. stf = st.replace(name, "def_" + name)
  83. defl.write(stf + "\n")
  84. # base.write("{\n")
  85. defl.write("{")
  86. if "void " not in stf:
  87. defl.write("return 0;")
  88. args = st[st.find("(") + 1:st.find(")")]
  89. args = args.split(",")
  90. allargs = []
  91. for ar in args:
  92. sp = ar.split(" ")
  93. q = sp[-1].split("*")[-1]
  94. if q == "void":
  95. continue
  96. allargs.append(q)
  97. """
  98. base.write("\t")
  99. if not st.startswith("GLAPI void"):
  100. base.write("return ");
  101. defl.write("return 0;")
  102. base.write("_%s(" %(name, ))
  103. d = ""
  104. for ar in allargs:
  105. d += ar + ","
  106. d = d[0:-1] + ");\n"
  107. base.write(d)
  108. base.write("}\n")
  109. """
  110. defl.write("}\n")
  111. init.write("GETFUNC(_%s, def_%s, %s, \"%s\");\n" %
  112. (name, name, proc, name))
  113. # st.replace(name, )
  114. for f in funcs:
  115. get(f)
  116. print(defl.getvalue())
  117. print(base.getvalue())
  118. print(init.getvalue())
  119. def replace(src, block_begin, block_end, data):
  120. start = src.find(block_begin) + len(block_begin) + 1
  121. end = src.find(block_end)
  122. src = src[0:start] + data + src[end:]
  123. return src
  124. HEADER = "../../oxygine/src/core/gl/oxgl.h"
  125. CPP = "../../oxygine/src/core/gl/oxgl.cpp"
  126. header = open(HEADER, "r").read()
  127. cpp = open(CPP, "r").read()
  128. header = replace(header, "//!--pfngl-begin--!", "//!--pfngl-end--!", extern.getvalue())
  129. header = replace(header, "//!--oxgl-begin--!", "//!--oxgl-end--!", define.getvalue())
  130. cpp = replace(cpp, "//!--defgl-begin--!", "//!--defgl-end--!", defl.getvalue())
  131. cpp = replace(cpp, "//!--_gl-begin--!", "//!--_gl-end--!", base.getvalue())
  132. cpp = replace(cpp, "//!--getfunc-begin--!", "//!--getfunc-end--!", init.getvalue())
  133. open(HEADER, "w").write(header)
  134. open(CPP, "w").write(cpp)