explicitly look up webgl1 or webgl2 functions in html5

This commit is contained in:
Vladimir Vukicevic 2019-06-17 22:39:27 +02:00 committed by Бранимир Караџић
parent 3d460e0445
commit 6b8d0c7ba2
2 changed files with 8 additions and 4 deletions

View File

@ -16,6 +16,8 @@
// from emscripten gl.c, because we're not going to go // from emscripten gl.c, because we're not going to go
// through egl // through egl
extern "C" void* emscripten_GetProcAddress(const char *name_); extern "C" void* emscripten_GetProcAddress(const char *name_);
extern "C" void* emscripten_webgl1_get_proc_address(const char *name_);
extern "C" void* emscripten_webgl2_get_proc_address(const char *name_);
namespace bgfx { namespace gl namespace bgfx { namespace gl
{ {
@ -130,7 +132,7 @@ namespace bgfx { namespace gl
SwapChainGL* swapChain = BX_NEW(g_allocator, SwapChainGL)(context, canvas); SwapChainGL* swapChain = BX_NEW(g_allocator, SwapChainGL)(context, canvas);
import(); import(1);
return swapChain; return swapChain;
} }
@ -169,14 +171,16 @@ namespace bgfx { namespace gl
} }
} }
void GlContext::import() void GlContext::import(int webGLVersion)
{ {
BX_TRACE("Import:"); BX_TRACE("Import:");
# define GL_EXTENSION(_optional, _proto, _func, _import) \ # define GL_EXTENSION(_optional, _proto, _func, _import) \
{ \ { \
if (NULL == _func) \ if (NULL == _func) \
{ \ { \
_func = (_proto)emscripten_GetProcAddress(#_import); \ _func = (_proto)emscripten_webgl1_get_proc_address(#_import); \
if (!_func && webGLVersion >= 2) \
_func = (_proto)emscripten_webgl2_get_proc_address(#_import); \
BX_TRACE("\t%p " #_func " (" #_import ")", _func); \ BX_TRACE("\t%p " #_func " (" #_import ")", _func); \
BGFX_FATAL(_optional || NULL != _func, Fatal::UnableToInitialize, "Failed to create WebGL/OpenGLES context. GetProcAddress(\"%s\")", #_import); \ BGFX_FATAL(_optional || NULL != _func, Fatal::UnableToInitialize, "Failed to create WebGL/OpenGLES context. GetProcAddress(\"%s\")", #_import); \
} \ } \

View File

@ -30,7 +30,7 @@ namespace bgfx { namespace gl
void swap(SwapChainGL* _swapChain = NULL); void swap(SwapChainGL* _swapChain = NULL);
void makeCurrent(SwapChainGL* _swapChain = NULL); void makeCurrent(SwapChainGL* _swapChain = NULL);
void import(); void import(int webGLVersion);
bool isValid() const bool isValid() const
{ {