genfn.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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. "glBindAttribLocation",
  20. "glLinkProgram",
  21. "glUniform1i",
  22. "glUniform2fv",
  23. "glUniform3fv",
  24. "glUniform4fv",
  25. "glUniform1f",
  26. "glUniformMatrix4fv",
  27. "glBindFramebuffer",
  28. "glGenFramebuffer",
  29. "glGenFramebuffers",
  30. "glCheckFramebufferStatus",
  31. "glDeleteFramebuffers",
  32. "glGetUniformLocation",
  33. "glFramebufferTexture2D",
  34. "glCompressedTexImage2D",
  35. "glBindBuffer",
  36. "glGenBuffers",
  37. "glBufferData",
  38. "glDeleteBuffers"
  39. "glGetProgramInfoLog",
  40. "glGetProgramiv",
  41. "glGenerateMipmap",
  42. "glStencilOpSeparate",
  43. "glGenRenderbuffers",
  44. "glBindRenderbuffer",
  45. "glRenderbufferStorage",
  46. "glFramebufferRenderbuffer",
  47. "glDeleteRenderbuffers",
  48. "glDeleteShader",
  49. "glDeleteBuffers",
  50. "glGetProgramInfoLog"
  51. ]
  52. # GLAPI void APIENTRY glDeleteProgram (GLuint program);
  53. # PFNGLDELETEPROGRAMPROC
  54. base = cStringIO.StringIO()
  55. defl = cStringIO.StringIO()
  56. init = cStringIO.StringIO()
  57. extern = cStringIO.StringIO()
  58. define = cStringIO.StringIO()
  59. init.write("""
  60. void initGLExtensions(myGetProcAdress func)
  61. {
  62. if (_glUseProgram)
  63. return;
  64. """)
  65. base.write("""
  66. extern "C"
  67. {
  68. """)
  69. def get(name):
  70. shname = name[2:len(name)]
  71. up = shname.upper()
  72. proc = "PFNGL" + up + "PROC"
  73. nm = " " + name + " "
  74. for l in lines:
  75. if l.find(nm) != -1:
  76. st = l
  77. if 0:
  78. st = ""
  79. st = st[0:-2]
  80. # PFNGLSHADERSOURCEPROC _glShaderSource = 0;
  81. base.write("%s _%s = 0;\n" % (proc, name))
  82. # base.write(st + "\n")
  83. extern.write("extern %s _%s;\n" % (proc, name))
  84. define.write("#define ox%s DECLARE_GLEXT(%s)\n" % (name, name))
  85. # extern.write(st + "\n")
  86. stf = st.replace(name, "def_" + name)
  87. defl.write(stf + "\n")
  88. # base.write("{\n")
  89. defl.write("{")
  90. args = st[st.find("(") + 1:st.find(")")]
  91. args = args.split(",")
  92. allargs = []
  93. for ar in args:
  94. sp = ar.split(" ")
  95. q = sp[-1].split("*")[-1]
  96. if q == "void":
  97. continue
  98. allargs.append(q)
  99. """
  100. base.write("\t")
  101. if not st.startswith("GLAPI void"):
  102. base.write("return ");
  103. defl.write("return 0;")
  104. base.write("_%s(" %(name, ))
  105. d = ""
  106. for ar in allargs:
  107. d += ar + ","
  108. d = d[0:-1] + ");\n"
  109. base.write(d)
  110. base.write("}\n")
  111. """
  112. defl.write("}\n")
  113. init.write("GETFUNC(_%s, def_%s, %s, \"%s\");\n" %
  114. (name, name, proc, name))
  115. # st.replace(name, )
  116. for f in funcs:
  117. get(f)
  118. base.write("""
  119. }
  120. """)
  121. print(defl.getvalue())
  122. print(base.getvalue())
  123. print(init.getvalue())
  124. open("res.cpp", "w").write(defl.getvalue() + base.getvalue() + init.getvalue())
  125. open("res.h", "w").write(extern.getvalue() + define.getvalue())