def dispatchApi(self, api): tag = api.name.upper() print r'const char *g_sz%sDllName = NULL;' % (tag, ) print r'HMODULE g_h%sModule = NULL;' % (tag, ) print r'' print r'static PROC' print r'_getPublicProcAddress(LPCSTR lpProcName) {' print r' if (!g_h%sModule) {' % tag print r' if (g_sz%sDllName) {' % tag print r' g_h%sModule = LoadLibraryA(g_sz%sDllName);' % (tag, tag) print r' if (!g_h%sModule) {' % tag print r' os::log("warning: failed to load %%s\n", g_sz%sDllName);' % tag print r' }' print r' }' print r' if (!g_h%sModule) {' % tag print r' g_h%sModule = LoadLibraryA("%s.dll");' % (tag, api.name) print r' }' print r' if (!g_h%sModule) {' % tag print r' os::log("error: failed to load %s.dll\n");' % api.name print r' exit(1);' print r' return NULL;' print r' }' print r' }' print r' return GetProcAddress(g_h%sModule, lpProcName);' % tag print r'}' print r'' Dispatcher.dispatchApi(self, api)
def header(self, api): print ''' static HMODULE g_hDll = NULL; static PROC _getPublicProcAddress(LPCSTR lpProcName) { if (!g_hDll) { char szDll[MAX_PATH] = {0}; if (!GetSystemDirectoryA(szDll, MAX_PATH)) { return NULL; } strcat(szDll, "\\\\%s"); g_hDll = LoadLibraryA(szDll); if (!g_hDll) { return NULL; } } return GetProcAddress(g_hDll, lpProcName); } ''' % self.dllname dispatcher = Dispatcher() dispatcher.dispatchApi(api) Tracer.header(self, api)
def dispatchApi(self, api): tag = api.name.upper() print r'const char *g_sz%sDllName = NULL;' % (tag,) print r'HMODULE g_h%sModule = NULL;' % (tag,) print r'' print r'static PROC' print r'_getPublicProcAddress(LPCSTR lpProcName) {' print r' if (!g_h%sModule) {' % tag print r' if (g_sz%sDllName) {' % tag print r' g_h%sModule = LoadLibraryA(g_sz%sDllName);' % (tag, tag) print r' if (!g_h%sModule) {' % tag print r' os::log("warning: failed to load %%s\n", g_sz%sDllName);' % tag print r' }' print r' }' print r' if (!g_h%sModule) {' % tag print r' g_h%sModule = LoadLibraryA("%s.dll");' % (tag, api.name) print r' }' print r' if (!g_h%sModule) {' % tag print r' os::log("error: failed to load %s.dll\n");' % api.name print r' exit(1);' print r' return NULL;' print r' }' print r' }' print r' return GetProcAddress(g_h%sModule, lpProcName);' % tag print r'}' print r'' Dispatcher.dispatchApi(self, api)
sys.stdout = open('eglproc_auto.hpp', 'w') print('// Generated by', sys.argv[0]) print('#ifndef _DISPATCH_EGLPROC_HPP_') print('#define _DISPATCH_EGLPROC_HPP_') print() print('#include "eglimports.hpp"') print('#include "common/os.hpp"') print() print('#ifndef GLES_CALLCONVENTION') print('#define GLES_CALLCONVENTION') print('#endif') print() print('void * _getProcAddress(const char *procName);') print('void ResetGLFuncPtrs();') print() dispatcher.dispatchApi(eglapi) print() dispatcher.dispatchApi(glesapi) print() print('#endif /* !_DISPATCH_EGLPROC_HPP_ */') print() ############################################################# sys.stdout = open('eglproc_auto.cpp', 'w') print('// Generated by', sys.argv[0]) print('#include <dispatch/eglproc_auto.hpp>') print() dispatcher.defineFptrs(eglapi) print() dispatcher.defineFptrs(glesapi) print()