Browse Source

new opengl ext

dmuratshin 8 years ago
parent
commit
2c2243d27e
3 changed files with 74 additions and 51 deletions
  1. 26 25
      oxygine/src/core/gl/oxgl.cpp
  2. 16 5
      oxygine/src/core/gl/oxgl.h
  3. 32 21
      tools/others/genfn.py

+ 26 - 25
oxygine/src/core/gl/oxgl.cpp

@@ -25,6 +25,7 @@ extern "C"
 #endif
     {}
 
+//!--defgl-begin--!
     GLAPI void APIENTRY def_glUseProgram(GLuint program)
     {}
     GLAPI void APIENTRY def_glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* pointer)
@@ -42,26 +43,15 @@ extern "C"
     GLAPI void APIENTRY def_glGetShaderInfoLog(GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
     {}
     GLAPI GLuint APIENTRY def_glCreateShader(GLenum type)
-    {
-        return 0;
-    }
+    {return 0;}
     GLAPI GLuint APIENTRY def_glCreateProgram(void)
-    {
-        return 0;
-    }
+    {return 0;}
     GLAPI void APIENTRY def_glAttachShader(GLuint program, GLuint shader)
     {}
     GLAPI void APIENTRY def_glCompileShader(GLuint shader)
     {}
-
     GLAPI void APIENTRY def_glBindAttribLocation(GLuint program, GLuint index, const GLchar* name)
     {}
-
-    GLAPI GLint APIENTRY def_glGetAttribLocation(GLuint program, const GLchar* name)
-    {
-        return 0;
-    }
-
     GLAPI void APIENTRY def_glLinkProgram(GLuint program)
     {}
     GLAPI void APIENTRY def_glUniform1i(GLint location, GLint v0)
@@ -83,15 +73,11 @@ extern "C"
     GLAPI void APIENTRY def_glGenFramebuffers(GLsizei n, GLuint* framebuffers)
     {}
     GLAPI GLenum APIENTRY def_glCheckFramebufferStatus(GLenum target)
-    {
-        return 0;
-    }
+    {return 0;}
     GLAPI void APIENTRY def_glDeleteFramebuffers(GLsizei n, const GLuint* framebuffers)
     {}
     GLAPI GLint APIENTRY def_glGetUniformLocation(GLuint program, const GLchar* name)
-    {
-        return 0;
-    }
+    {return 0;}
     GLAPI void APIENTRY def_glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
     {}
     GLAPI void APIENTRY def_glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data)
@@ -118,16 +104,23 @@ extern "C"
     {}
     GLAPI void APIENTRY def_glDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers)
     {}
-
     GLAPI void APIENTRY def_glDeleteShader(GLuint shader)
     {}
     GLAPI void APIENTRY def_glDeleteBuffers(GLsizei n, const GLuint* buffers)
     {}
     GLAPI void APIENTRY def_glGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei* length, GLchar* infoLog)
     {}
+    GLAPI void APIENTRY def_glBlendEquation(GLenum mode)
+    {}
+    GLAPI void APIENTRY def_glBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
+    {}
+    GLAPI void APIENTRY def_glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha)
+    {}
+    GLAPI GLint APIENTRY def_glGetAttribLocation(GLuint program, const GLchar* name)
+    {return 0;}
+//!--defgl-end--!
 
-
-
+//!--_gl-begin--!
     PFNGLSHADERSOURCEPROC _glShaderSource = 0;
     PFNGLUSEPROGRAMPROC _glUseProgram = 0;
     PFNGLVERTEXATTRIBPOINTERPROC _glVertexAttribPointer = 0;
@@ -142,7 +135,6 @@ extern "C"
     PFNGLATTACHSHADERPROC _glAttachShader = 0;
     PFNGLCOMPILESHADERPROC _glCompileShader = 0;
     PFNGLBINDATTRIBLOCATIONPROC _glBindAttribLocation = 0;
-    PFNGLGETATTRIBLOCATIONPROC _glGetAttribLocation = 0;
     PFNGLLINKPROGRAMPROC _glLinkProgram = 0;
     PFNGLUNIFORM1IPROC _glUniform1i = 0;
     PFNGLUNIFORM2FPROC _glUniform2f = 0;
@@ -172,6 +164,11 @@ extern "C"
     PFNGLDELETESHADERPROC _glDeleteShader = 0;
     PFNGLDELETEBUFFERSPROC _glDeleteBuffers = 0;
     PFNGLGETPROGRAMINFOLOGPROC _glGetProgramInfoLog = 0;
+    PFNGLBLENDEQUATIONPROC _glBlendEquation = 0;
+    PFNGLBLENDFUNCSEPARATEPROC _glBlendFuncSeparate = 0;
+    PFNGLBLENDEQUATIONSEPARATEPROC _glBlendEquationSeparate = 0;
+    PFNGLGETATTRIBLOCATIONPROC _glGetAttribLocation = 0;
+//!--_gl-end--!
 }
 
 int initGLExtensions(myGetProcAdress func)
@@ -181,6 +178,7 @@ int initGLExtensions(myGetProcAdress func)
 
     int missing = 0;
 
+//!--getfunc-begin--!
     GETFUNC(_glShaderSource, def_glShaderSource, PFNGLSHADERSOURCEPROC, "glShaderSource");
     GETFUNC(_glUseProgram, def_glUseProgram, PFNGLUSEPROGRAMPROC, "glUseProgram");
     GETFUNC(_glVertexAttribPointer, def_glVertexAttribPointer, PFNGLVERTEXATTRIBPOINTERPROC, "glVertexAttribPointer");
@@ -195,7 +193,6 @@ int initGLExtensions(myGetProcAdress func)
     GETFUNC(_glAttachShader, def_glAttachShader, PFNGLATTACHSHADERPROC, "glAttachShader");
     GETFUNC(_glCompileShader, def_glCompileShader, PFNGLCOMPILESHADERPROC, "glCompileShader");
     GETFUNC(_glBindAttribLocation, def_glBindAttribLocation, PFNGLBINDATTRIBLOCATIONPROC, "glBindAttribLocation");
-    GETFUNC(_glGetAttribLocation, def_glGetAttribLocation, PFNGLGETATTRIBLOCATIONPROC, "glGetAttribLocation");
     GETFUNC(_glLinkProgram, def_glLinkProgram, PFNGLLINKPROGRAMPROC, "glLinkProgram");
     GETFUNC(_glUniform1i, def_glUniform1i, PFNGLUNIFORM1IPROC, "glUniform1i");
     GETFUNC(_glUniform2f, def_glUniform2f, PFNGLUNIFORM2FPROC, "glUniform2f");
@@ -225,6 +222,11 @@ int initGLExtensions(myGetProcAdress func)
     GETFUNC(_glDeleteShader, def_glDeleteShader, PFNGLDELETESHADERPROC, "glDeleteShader");
     GETFUNC(_glDeleteBuffers, def_glDeleteBuffers, PFNGLDELETEBUFFERSPROC, "glDeleteBuffers");
     GETFUNC(_glGetProgramInfoLog, def_glGetProgramInfoLog, PFNGLGETPROGRAMINFOLOGPROC, "glGetProgramInfoLog");
+    GETFUNC(_glBlendEquation, def_glBlendEquation, PFNGLBLENDEQUATIONPROC, "glBlendEquation");
+    GETFUNC(_glBlendFuncSeparate, def_glBlendFuncSeparate, PFNGLBLENDFUNCSEPARATEPROC, "glBlendFuncSeparate");
+    GETFUNC(_glBlendEquationSeparate, def_glBlendEquationSeparate, PFNGLBLENDEQUATIONSEPARATEPROC, "glBlendEquationSeparate");
+    GETFUNC(_glGetAttribLocation, def_glGetAttribLocation, PFNGLGETATTRIBLOCATIONPROC, "glGetAttribLocation");
+//!--getfunc-end--!
 
     return missing;
 }
@@ -239,7 +241,6 @@ int initGLExtensions(myGetProcAdress func)
 #pragma warning(pop)
 #endif
 
-
 namespace oxygine
 {
     void checkGLError()

+ 16 - 5
oxygine/src/core/gl/oxgl.h

@@ -25,6 +25,7 @@
 
 extern "C"
 {
+//!--pfngl-begin--!
     extern PFNGLSHADERSOURCEPROC _glShaderSource;
     extern PFNGLUSEPROGRAMPROC _glUseProgram;
     extern PFNGLVERTEXATTRIBPOINTERPROC _glVertexAttribPointer;
@@ -39,11 +40,10 @@ extern "C"
     extern PFNGLATTACHSHADERPROC _glAttachShader;
     extern PFNGLCOMPILESHADERPROC _glCompileShader;
     extern PFNGLBINDATTRIBLOCATIONPROC _glBindAttribLocation;
-    extern PFNGLGETATTRIBLOCATIONPROC _glGetAttribLocation;
     extern PFNGLLINKPROGRAMPROC _glLinkProgram;
     extern PFNGLUNIFORM1IPROC _glUniform1i;
-    extern PFNGLUNIFORM2FVPROC _glUniform2fv;
     extern PFNGLUNIFORM2FPROC _glUniform2f;
+    extern PFNGLUNIFORM2FVPROC _glUniform2fv;
     extern PFNGLUNIFORM3FVPROC _glUniform3fv;
     extern PFNGLUNIFORM4FVPROC _glUniform4fv;
     extern PFNGLUNIFORM1FPROC _glUniform1f;
@@ -69,6 +69,11 @@ extern "C"
     extern PFNGLDELETESHADERPROC _glDeleteShader;
     extern PFNGLDELETEBUFFERSPROC _glDeleteBuffers;
     extern PFNGLGETPROGRAMINFOLOGPROC _glGetProgramInfoLog;
+    extern PFNGLBLENDEQUATIONPROC _glBlendEquation;
+    extern PFNGLBLENDFUNCSEPARATEPROC _glBlendFuncSeparate;
+    extern PFNGLBLENDEQUATIONSEPARATEPROC _glBlendEquationSeparate;
+    extern PFNGLGETATTRIBLOCATIONPROC _glGetAttribLocation;
+//!--pfngl-end--!
 }
 
 #elif __ANDROID__
@@ -123,6 +128,8 @@ extern "C"
 #define PASTER(x,y) x ## y
 #define EVALUATOR(x,y)  PASTER(x,y)
 #define DECLARE_GLEXT(y)  EVALUATOR(GLPREF,y)
+
+//!--oxgl-begin--!
 #define oxglShaderSource DECLARE_GLEXT(glShaderSource)
 #define oxglUseProgram DECLARE_GLEXT(glUseProgram)
 #define oxglVertexAttribPointer DECLARE_GLEXT(glVertexAttribPointer)
@@ -137,11 +144,10 @@ extern "C"
 #define oxglAttachShader DECLARE_GLEXT(glAttachShader)
 #define oxglCompileShader DECLARE_GLEXT(glCompileShader)
 #define oxglBindAttribLocation DECLARE_GLEXT(glBindAttribLocation)
-#define oxglGetAttribLocation DECLARE_GLEXT(glGetAttribLocation)
 #define oxglLinkProgram DECLARE_GLEXT(glLinkProgram)
 #define oxglUniform1i DECLARE_GLEXT(glUniform1i)
-#define oxglUniform2fv DECLARE_GLEXT(glUniform2fv)
 #define oxglUniform2f DECLARE_GLEXT(glUniform2f)
+#define oxglUniform2fv DECLARE_GLEXT(glUniform2fv)
 #define oxglUniform3fv DECLARE_GLEXT(glUniform3fv)
 #define oxglUniform4fv DECLARE_GLEXT(glUniform4fv)
 #define oxglUniform1f DECLARE_GLEXT(glUniform1f)
@@ -167,6 +173,11 @@ extern "C"
 #define oxglDeleteShader DECLARE_GLEXT(glDeleteShader)
 #define oxglDeleteBuffers DECLARE_GLEXT(glDeleteBuffers)
 #define oxglGetProgramInfoLog DECLARE_GLEXT(glGetProgramInfoLog)
+#define oxglBlendEquation DECLARE_GLEXT(glBlendEquation)
+#define oxglBlendFuncSeparate DECLARE_GLEXT(glBlendFuncSeparate)
+#define oxglBlendEquationSeparate DECLARE_GLEXT(glBlendEquationSeparate)
+#define oxglGetAttribLocation DECLARE_GLEXT(glGetAttribLocation)
+//!--oxgl-end--!
 
 
 //#undef PASTER
@@ -178,4 +189,4 @@ namespace oxygine {void checkGLError();}
 
 typedef void*  (*myGetProcAdress)(const char*);
 /**returns number of missing functions/extensions*/
-int initGLExtensions(myGetProcAdress);
+int initGLExtensions(myGetProcAdress);

+ 32 - 21
tools/others/genfn.py

@@ -22,6 +22,7 @@ funcs = ["glShaderSource",
          "glBindAttribLocation",
          "glLinkProgram",
          "glUniform1i",
+         "glUniform2f",
          "glUniform2fv",
          "glUniform3fv",
          "glUniform4fv",
@@ -50,7 +51,11 @@ funcs = ["glShaderSource",
          "glDeleteRenderbuffers",
          "glDeleteShader",
          "glDeleteBuffers",
-         "glGetProgramInfoLog"
+         "glGetProgramInfoLog",
+         "glBlendEquation",
+         "glBlendFuncSeparate",
+         "glBlendEquationSeparate",
+         "glGetAttribLocation",
          ]
 
 
@@ -64,20 +69,6 @@ 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()
@@ -105,6 +96,9 @@ def get(name):
             # base.write("{\n")
             defl.write("{")
 
+            if "void " not in stf:
+            	defl.write("return 0;")  
+
             args = st[st.find("(") + 1:st.find(")")]
             args = args.split(",")
 
@@ -143,13 +137,30 @@ def get(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())
+
+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)