|
|
@@ -162,8 +162,32 @@ namespace bgfx
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ static const char* getGLString(GLenum _name)
|
|
|
+ {
|
|
|
+ const char* str = (const char*)glGetString(_name);
|
|
|
+ glGetError(); // ignore error if glGetString returns NULL.
|
|
|
+ if (NULL != str)
|
|
|
+ {
|
|
|
+ return str;
|
|
|
+ }
|
|
|
+
|
|
|
+ return "<unknown>";
|
|
|
+ }
|
|
|
+
|
|
|
+ static uint32_t getGLStringHash(GLenum _name)
|
|
|
+ {
|
|
|
+ const char* str = (const char*)glGetString(_name);
|
|
|
+ glGetError(); // ignore error if glGetString returns NULL.
|
|
|
+ if (NULL != str)
|
|
|
+ {
|
|
|
+ return bx::hashMurmur2A(str, strlen(str) );
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
#if BGFX_CONFIG_RENDERER_OPENGL
|
|
|
- static const char* toString(GLenum _enum)
|
|
|
+ const char* toString(GLenum _enum)
|
|
|
{
|
|
|
switch (_enum)
|
|
|
{
|
|
|
@@ -454,6 +478,11 @@ namespace bgfx
|
|
|
{
|
|
|
m_glctx.create(BGFX_DEFAULT_WIDTH, BGFX_DEFAULT_HEIGHT);
|
|
|
|
|
|
+ m_vendor = getGLString(GL_VENDOR);
|
|
|
+ m_renderer = getGLString(GL_RENDERER);
|
|
|
+ m_version = getGLString(GL_VERSION);
|
|
|
+ m_glslVersion = getGLString(GL_SHADING_LANGUAGE_VERSION);
|
|
|
+
|
|
|
#if BGFX_CONFIG_RENDERER_OPENGL
|
|
|
m_queries.create();
|
|
|
#endif // BGFX_CONFIG_RENDERER_OPENGL
|
|
|
@@ -511,6 +540,11 @@ namespace bgfx
|
|
|
GLuint m_backBufferFbo;
|
|
|
GLuint m_backBufferRbos[2];
|
|
|
GlContext m_glctx;
|
|
|
+
|
|
|
+ const char* m_vendor;
|
|
|
+ const char* m_renderer;
|
|
|
+ const char* m_version;
|
|
|
+ const char* m_glslVersion;
|
|
|
};
|
|
|
|
|
|
RendererContext s_renderCtx;
|
|
|
@@ -2128,18 +2162,6 @@ namespace bgfx
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- uint32_t glGetStringHash(GLenum _name)
|
|
|
- {
|
|
|
- const char* str = (const char*)glGetString(_name);
|
|
|
- glGetError(); // ignore error if glGetString returns NULL.
|
|
|
- if (NULL != str)
|
|
|
- {
|
|
|
- return bx::hashMurmur2A(str, strlen(str) );
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
- }
|
|
|
-
|
|
|
void Context::rendererInit()
|
|
|
{
|
|
|
s_renderCtx.init();
|
|
|
@@ -2179,17 +2201,18 @@ namespace bgfx
|
|
|
GL_GET(GL_MAX_TEXTURE_SIZE, 64);
|
|
|
GL_GET(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, 0);
|
|
|
GL_GET(GL_MAX_RENDERBUFFER_SIZE, 1);
|
|
|
-
|
|
|
- const char* version = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION);
|
|
|
- GL_CHECK(;); // check if error is generated by glGetString.
|
|
|
- BX_TRACE("GLSL version: %s", version);
|
|
|
+
|
|
|
+ BX_TRACE(" Vendor: %s", s_renderCtx.m_vendor);
|
|
|
+ BX_TRACE(" Renderer: %s", s_renderCtx.m_renderer);
|
|
|
+ BX_TRACE(" Version: %s", s_renderCtx.m_version);
|
|
|
+ BX_TRACE("GLSL version: %s", s_renderCtx.m_glslVersion);
|
|
|
#endif // BGFX_CONFIG_DEBUG
|
|
|
|
|
|
// Initial binary shader hash depends on driver version.
|
|
|
s_renderCtx.m_hash = ( (BX_PLATFORM_WINDOWS<<1) | BX_ARCH_64BIT)
|
|
|
- ^ (uint64_t(glGetStringHash(GL_VENDOR ) )<<32)
|
|
|
- ^ (uint64_t(glGetStringHash(GL_RENDERER) )<<0 )
|
|
|
- ^ (uint64_t(glGetStringHash(GL_VERSION ) )<<16)
|
|
|
+ ^ (uint64_t(getGLStringHash(GL_VENDOR ) )<<32)
|
|
|
+ ^ (uint64_t(getGLStringHash(GL_RENDERER) )<<0 )
|
|
|
+ ^ (uint64_t(getGLStringHash(GL_VERSION ) )<<16)
|
|
|
;
|
|
|
|
|
|
const char* extensions = (const char*)glGetString(GL_EXTENSIONS);
|
|
|
@@ -2314,19 +2337,23 @@ namespace bgfx
|
|
|
}
|
|
|
|
|
|
#if !BGFX_CONFIG_RENDERER_OPENGLES3
|
|
|
- if (NULL != glVertexAttribDivisor
|
|
|
- && NULL != glDrawArraysInstanced
|
|
|
- && NULL != glDrawElementsInstanced)
|
|
|
- {
|
|
|
- s_vertexAttribDivisor = glVertexAttribDivisor;
|
|
|
- s_drawArraysInstanced = glDrawArraysInstanced;
|
|
|
- s_drawElementsInstanced = glDrawElementsInstanced;
|
|
|
- }
|
|
|
- else
|
|
|
+ if (s_extension[Extension::ARB_instanced_arrays].m_supported
|
|
|
+ && s_extension[Extension::ANGLE_instanced_arrays].m_supported)
|
|
|
{
|
|
|
- s_vertexAttribDivisor = stubVertexAttribDivisor;
|
|
|
- s_drawArraysInstanced = stubDrawArraysInstanced;
|
|
|
- s_drawElementsInstanced = stubDrawElementsInstanced;
|
|
|
+ if (NULL != glVertexAttribDivisor
|
|
|
+ && NULL != glDrawArraysInstanced
|
|
|
+ && NULL != glDrawElementsInstanced)
|
|
|
+ {
|
|
|
+ s_vertexAttribDivisor = glVertexAttribDivisor;
|
|
|
+ s_drawArraysInstanced = glDrawArraysInstanced;
|
|
|
+ s_drawElementsInstanced = glDrawElementsInstanced;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ s_vertexAttribDivisor = stubVertexAttribDivisor;
|
|
|
+ s_drawArraysInstanced = stubDrawArraysInstanced;
|
|
|
+ s_drawElementsInstanced = stubDrawElementsInstanced;
|
|
|
+ }
|
|
|
}
|
|
|
#endif // !BGFX_CONFIG_RENDERER_OPENGLES3
|
|
|
|
|
|
@@ -3250,8 +3277,14 @@ namespace bgfx
|
|
|
double toMs = 1000.0/freq;
|
|
|
|
|
|
tvm.clear();
|
|
|
- uint16_t pos = 10;
|
|
|
- tvm.printf(0, 0, BGFX_CONFIG_DEBUG ? 0x89 : 0x8f, " " BGFX_RENDERER_NAME " ");
|
|
|
+ uint16_t pos = 0;
|
|
|
+ tvm.printf(0, pos++, BGFX_CONFIG_DEBUG ? 0x89 : 0x8f, " " BGFX_RENDERER_NAME " ");
|
|
|
+ tvm.printf(0, pos++, 0x0f, " Vendor: %s", s_renderCtx.m_vendor);
|
|
|
+ tvm.printf(0, pos++, 0x0f, " Renderer: %s", s_renderCtx.m_renderer);
|
|
|
+ tvm.printf(0, pos++, 0x0f, " Version: %s", s_renderCtx.m_version);
|
|
|
+ tvm.printf(0, pos++, 0x0f, "GLSL version: %s", s_renderCtx.m_glslVersion);
|
|
|
+
|
|
|
+ pos = 10;
|
|
|
tvm.printf(10, pos++, 0x8e, " Frame CPU: %7.3f, % 7.3f \x1f, % 7.3f \x1e [ms] / % 6.2f FPS"
|
|
|
, double(frameTime)*toMs
|
|
|
, double(min)*toMs
|