* Only load needed extensions (ie none.)
* Fix bug in version query. * First commit!
This commit is contained in:
@@ -99,8 +99,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
|||||||
STR_String exitstring = "";
|
STR_String exitstring = "";
|
||||||
BlendFileData *bfd= NULL;
|
BlendFileData *bfd= NULL;
|
||||||
|
|
||||||
RAS_GLExtensionManager *extman = new RAS_GLExtensionManager(SYS_GetCommandLineInt(SYS_GetSystem(), "show_extensions", 1));
|
bgl::InitExtensions(1);
|
||||||
extman->LinkExtensions();
|
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@@ -123,7 +122,7 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
|||||||
int usevta = SYS_GetCommandLineInt(syshandle,"vertexarrays",1);
|
int usevta = SYS_GetCommandLineInt(syshandle,"vertexarrays",1);
|
||||||
bool useVertexArrays = (usevta > 0);
|
bool useVertexArrays = (usevta > 0);
|
||||||
|
|
||||||
if (useVertexArrays && extman->QueryVersion(1, 1))
|
if (useVertexArrays && bgl::QueryVersion(1, 1))
|
||||||
rasterizer = new RAS_VAOpenGLRasterizer(canvas);
|
rasterizer = new RAS_VAOpenGLRasterizer(canvas);
|
||||||
else
|
else
|
||||||
rasterizer = new RAS_OpenGLRasterizer(canvas);
|
rasterizer = new RAS_OpenGLRasterizer(canvas);
|
||||||
@@ -369,10 +368,5 @@ extern "C" void StartKetsjiShell(struct ScrArea *area,
|
|||||||
}
|
}
|
||||||
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
|
} while (exitrequested == KX_EXIT_REQUEST_RESTART_GAME || exitrequested == KX_EXIT_REQUEST_START_OTHER_GAME);
|
||||||
|
|
||||||
if (extman)
|
|
||||||
{
|
|
||||||
delete extman;
|
|
||||||
extman = NULL;
|
|
||||||
}
|
|
||||||
if (bfd) BLO_blendfiledata_free(bfd);
|
if (bfd) BLO_blendfiledata_free(bfd);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -51,7 +51,7 @@
|
|||||||
#include "RAS_GLExtensionManager.h"
|
#include "RAS_GLExtensionManager.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace RAS_GL;
|
using namespace bgl;
|
||||||
|
|
||||||
RAS_VAOpenGLRasterizer::RAS_VAOpenGLRasterizer(RAS_ICanvas* canvas)
|
RAS_VAOpenGLRasterizer::RAS_VAOpenGLRasterizer(RAS_ICanvas* canvas)
|
||||||
:RAS_OpenGLRasterizer(canvas)
|
:RAS_OpenGLRasterizer(canvas)
|
||||||
@@ -201,10 +201,10 @@ void RAS_VAOpenGLRasterizer::IndexPrimitives( const vecVertexArray& vertexarrays
|
|||||||
glTexCoordPointer(2,GL_FLOAT,vtxstride,vertexarray->getUV1());
|
glTexCoordPointer(2,GL_FLOAT,vtxstride,vertexarray->getUV1());
|
||||||
glColorPointer(4,GL_UNSIGNED_BYTE,vtxstride,&vertexarray->getRGBA());
|
glColorPointer(4,GL_UNSIGNED_BYTE,vtxstride,&vertexarray->getRGBA());
|
||||||
glNormalPointer(GL_SHORT,vtxstride,vertexarray->getNormal());
|
glNormalPointer(GL_SHORT,vtxstride,vertexarray->getNormal());
|
||||||
glLockArraysEXT(0,numverts);
|
//glLockArraysEXT(0,numverts);
|
||||||
// here the actual drawing takes places
|
// here the actual drawing takes places
|
||||||
glDrawElements(drawmode,numindices,GL_UNSIGNED_INT,&(indexarray[0]));
|
glDrawElements(drawmode,numindices,GL_UNSIGNED_INT,&(indexarray[0]));
|
||||||
glUnlockArraysEXT();
|
//glUnlockArraysEXT();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -441,6 +441,8 @@ def find(l, x):
|
|||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
# Write Prototypes
|
||||||
ext = ""
|
ext = ""
|
||||||
fns = []
|
fns = []
|
||||||
fnlist = []
|
fnlist = []
|
||||||
@@ -473,6 +475,7 @@ for i in glext_h:
|
|||||||
if (string.lower(line.group(1)) == string.lower(j)):
|
if (string.lower(line.group(1)) == string.lower(j)):
|
||||||
fnlist += [(j, "PFN" + line.group(1) + "PROC")]
|
fnlist += [(j, "PFN" + line.group(1) + "PROC")]
|
||||||
|
|
||||||
|
# Write link code
|
||||||
ext = ""
|
ext = ""
|
||||||
fns = []
|
fns = []
|
||||||
fnlist = []
|
fnlist = []
|
||||||
@@ -505,6 +508,7 @@ for i in glext_h:
|
|||||||
if (string.lower(line.group(1)) == string.lower(j)):
|
if (string.lower(line.group(1)) == string.lower(j)):
|
||||||
fnlist += [(j, "PFN" + line.group(1) + "PROC")]
|
fnlist += [(j, "PFN" + line.group(1) + "PROC")]
|
||||||
|
|
||||||
|
# Write header code
|
||||||
ext = ""
|
ext = ""
|
||||||
fns = []
|
fns = []
|
||||||
fnlist = []
|
fnlist = []
|
||||||
@@ -536,3 +540,89 @@ for i in glext_h:
|
|||||||
for j in fns:
|
for j in fns:
|
||||||
if (string.lower(line.group(1)) == string.lower(j)):
|
if (string.lower(line.group(1)) == string.lower(j)):
|
||||||
fnlist += [(j, "PFN" + line.group(1) + "PROC")]
|
fnlist += [(j, "PFN" + line.group(1) + "PROC")]
|
||||||
|
|
||||||
|
# Write Python link code
|
||||||
|
ext = ""
|
||||||
|
extensions = []
|
||||||
|
fns = []
|
||||||
|
defines = []
|
||||||
|
ifdef = 0
|
||||||
|
for i in glext_h:
|
||||||
|
line = re.search('^#ifn?def', i)
|
||||||
|
if (line):
|
||||||
|
ifdef = ifdef + 1
|
||||||
|
|
||||||
|
line = re.search('^#ifndef (GL_.*)', i)
|
||||||
|
if (line):
|
||||||
|
if (not re.search('GL_VERSION.*', line.group(1)) and find(whitelist, line.group(1))):
|
||||||
|
ext = line.group(1)
|
||||||
|
|
||||||
|
line = re.search('^#endif', i)
|
||||||
|
if (line):
|
||||||
|
ifdef = ifdef - 1
|
||||||
|
if (ifdef == 0 and ext != ""):
|
||||||
|
done = 0
|
||||||
|
for e in range(len(extensions)):
|
||||||
|
if extensions[e][0] == ext:
|
||||||
|
extensions[e] = (ext, defines + extensions[e][1], fns + extensions[e][2])
|
||||||
|
done = 1
|
||||||
|
if not done:
|
||||||
|
extensions = extensions + [(ext, defines, fns)]
|
||||||
|
ext = ""
|
||||||
|
fns = []
|
||||||
|
defines = []
|
||||||
|
if (ext != ""):
|
||||||
|
line = re.search('#define +(GL.*) +(0x.*)', i) # #define GL_ONE_MINUS_CONSTANT_COLOR 0x8002
|
||||||
|
if (line):
|
||||||
|
defines += [(line.group(1), line.group(2))]
|
||||||
|
|
||||||
|
line = re.search('(.*)(gl.*)(\(.*\));', i) # GLAPI void APIENTRY glMultiTexCoord2f (GLenum, GLfloat, GLfloat);
|
||||||
|
if (line):
|
||||||
|
fns += [(line.group(1), line.group(2), line.group(3))]
|
||||||
|
|
||||||
|
for ext in extensions:
|
||||||
|
if (find(blacklist, ext[0]) or not find(whitelist, ext[0])):
|
||||||
|
continue
|
||||||
|
print "#if defined(" + ext[0] + ")"
|
||||||
|
for fn in ext[2]:
|
||||||
|
line = re.search('gl(.*)', fn[1])
|
||||||
|
# BGL_Wrap(2, RasterPos2f, void, (GLfloat, GLfloat))
|
||||||
|
rtype = ""
|
||||||
|
for r in string.split(fn[0]):
|
||||||
|
if r != "GLAPI" and r != "APIENTRY":
|
||||||
|
rtype = rtype + " " + r
|
||||||
|
params = ""
|
||||||
|
for p in string.split(fn[2], ','):
|
||||||
|
pline = re.search('(.*) \*', p)
|
||||||
|
if (pline):
|
||||||
|
p = pline.group(1) + "P"
|
||||||
|
if params == "":
|
||||||
|
params = p
|
||||||
|
else:
|
||||||
|
params = params + "," + p
|
||||||
|
if not params[-1] == ")":
|
||||||
|
params = params + ")"
|
||||||
|
print "BGL_Wrap(" + str(len(string.split(fn[2], ','))) + ", " + line.group(1) + ",\t" + rtype + ",\t" + params + ")"
|
||||||
|
print "#endif"
|
||||||
|
print
|
||||||
|
|
||||||
|
for ext in extensions:
|
||||||
|
if (find(blacklist, ext[0]) or not find(whitelist, ext[0])):
|
||||||
|
continue
|
||||||
|
print 'PyDict_SetItemString(dict, "' + ext[0] + '", PyInt_FromLong(_' + ext[0] + '))'
|
||||||
|
print "#if defined(" + ext[0] + ")"
|
||||||
|
print "if (bglQueryExtension(_" + ext[0] + ")) {"
|
||||||
|
if len(ext[2]) > 0:
|
||||||
|
for fn in ext[2]:
|
||||||
|
line = re.search('gl(.*)', fn[1])
|
||||||
|
# MethodDef(Vertex3iv),
|
||||||
|
print " BGL_AddMethod(" + line.group(1) + ");"
|
||||||
|
print
|
||||||
|
|
||||||
|
for define in ext[1]:
|
||||||
|
print " BGL_AddConst(" + define[0] + ");"
|
||||||
|
print
|
||||||
|
|
||||||
|
print "}"
|
||||||
|
print "#endif"
|
||||||
|
print
|
||||||
|
Reference in New Issue
Block a user