Merge branch 'master' of github.com:bkaradzic/bgfx

This commit is contained in:
Branimir Karadžić 2016-10-19 18:12:14 -07:00
commit 1279f4c95c
5 changed files with 69 additions and 30 deletions

View File

@ -385,6 +385,7 @@ int _main_(int _argc, char** _argv)
bgfx::destroyUniform(u_shadowMap); bgfx::destroyUniform(u_shadowMap);
bgfx::destroyUniform(u_lightPos); bgfx::destroyUniform(u_lightPos);
bgfx::destroyUniform(u_lightMtx); bgfx::destroyUniform(u_lightMtx);
bgfx::destroyUniform(u_depthScaleOffset);
// Shutdown bgfx. // Shutdown bgfx.
bgfx::shutdown(); bgfx::shutdown();

View File

@ -1077,6 +1077,8 @@ namespace bgfx
/// Returns performance counters. /// Returns performance counters.
/// ///
/// @attention C99 equivalent is `bgfx_get_stats`.
///
const Stats* getStats(); const Stats* getStats();
/// Allocate buffer to pass to bgfx calls. Data will be freed inside bgfx. /// Allocate buffer to pass to bgfx calls. Data will be freed inside bgfx.

View File

@ -162,6 +162,7 @@ typedef void (GL_APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, G
typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label);
typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param);
typedef void (GL_APIENTRYP PFNGLPOINTSIZEPROC) (GLfloat size); typedef void (GL_APIENTRYP PFNGLPOINTSIZEPROC) (GLfloat size);
typedef void (GL_APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode);
typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void);
typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length);
typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value);
@ -404,7 +405,8 @@ GL_IMPORT______(false, PFNGLVIEWPORTPROC, glViewport);
# if BGFX_CONFIG_RENDERER_OPENGL # if BGFX_CONFIG_RENDERER_OPENGL
GL_IMPORT______(false, PFNGLCLEARDEPTHPROC, glClearDepth); GL_IMPORT______(false, PFNGLCLEARDEPTHPROC, glClearDepth);
GL_IMPORT______(false, PFNGLPOINTSIZEPROC, glPointSize); GL_IMPORT______(true, PFNGLPOINTSIZEPROC, glPointSize);
GL_IMPORT______(true, PFNGLPOLYGONMODEPROC, glPolygonMode);
GL_IMPORT_ARB__(true, PFNGLDEBUGMESSAGECONTROLPROC, glDebugMessageControl); GL_IMPORT_ARB__(true, PFNGLDEBUGMESSAGECONTROLPROC, glDebugMessageControl);
GL_IMPORT_ARB__(true, PFNGLDEBUGMESSAGEINSERTPROC, glDebugMessageInsert); GL_IMPORT_ARB__(true, PFNGLDEBUGMESSAGEINSERTPROC, glDebugMessageInsert);
@ -467,6 +469,8 @@ GL_IMPORT______(true, PFNGLFRAMETERMINATORGREMEDYPROC, glFrameTermin
GL_IMPORT______(true, PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC, glGetTranslatedShaderSourceANGLE); GL_IMPORT______(true, PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC, glGetTranslatedShaderSourceANGLE);
#if !BGFX_CONFIG_RENDERER_OPENGL #if !BGFX_CONFIG_RENDERER_OPENGL
GL_IMPORT______(true, PFNGLPOINTSIZEPROC, glPointSize);
GL_IMPORT______(true, PFNGLPOLYGONMODEPROC, glPolygonMode);
GL_IMPORT_ANGLE(true, PFNGLBLITFRAMEBUFFERPROC, glBlitFramebuffer); GL_IMPORT_ANGLE(true, PFNGLBLITFRAMEBUFFERPROC, glBlitFramebuffer);
GL_IMPORT_ANGLE(true, PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC, glRenderbufferStorageMultisample); GL_IMPORT_ANGLE(true, PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC, glRenderbufferStorageMultisample);

View File

@ -1015,6 +1015,10 @@ namespace bgfx { namespace gl
} }
} }
static void GL_APIENTRY stubPolygonMode(GLenum /*_face*/, GLenum /*_mode*/)
{
}
typedef void (*PostSwapBuffersFn)(uint32_t _width, uint32_t _height); typedef void (*PostSwapBuffersFn)(uint32_t _width, uint32_t _height);
static const char* getGLString(GLenum _name) static const char* getGLString(GLenum _name)
@ -1928,6 +1932,11 @@ namespace bgfx { namespace gl
: 0 : 0
; ;
if (NULL == glPolygonMode)
{
glPolygonMode = stubPolygonMode;
}
if (s_extension[Extension::ARB_copy_image].m_supported if (s_extension[Extension::ARB_copy_image].m_supported
|| s_extension[Extension::EXT_copy_image].m_supported || s_extension[Extension::EXT_copy_image].m_supported
|| s_extension[Extension:: NV_copy_image].m_supported || s_extension[Extension:: NV_copy_image].m_supported
@ -6139,11 +6148,17 @@ namespace bgfx { namespace gl
uint8_t primIndex; uint8_t primIndex;
{ {
const uint64_t pt = _render->m_debug&BGFX_DEBUG_WIREFRAME ? BGFX_STATE_PT_LINES : 0; const uint64_t pt = 0;
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT); primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
} }
PrimInfo prim = s_primInfo[primIndex]; PrimInfo prim = s_primInfo[primIndex];
GL_CHECK(glPolygonMode(GL_FRONT_AND_BACK
, _render->m_debug&BGFX_DEBUG_WIREFRAME
? GL_LINE
: GL_FILL
) );
uint32_t baseVertex = 0; uint32_t baseVertex = 0;
GLuint currentVao = 0; GLuint currentVao = 0;
bool wasCompute = false; bool wasCompute = false;
@ -6643,38 +6658,39 @@ namespace bgfx { namespace gl
viewState.m_alphaRef = ref/255.0f; viewState.m_alphaRef = ref/255.0f;
} }
#if BGFX_CONFIG_RENDERER_OPENGL if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) )
if ( (BGFX_STATE_PT_POINTS|BGFX_STATE_POINT_SIZE_MASK) & changedFlags)
{ {
float pointSize = (float)(bx::uint32_max(1, (newFlags&BGFX_STATE_POINT_SIZE_MASK)>>BGFX_STATE_POINT_SIZE_SHIFT) ); if ( (BGFX_STATE_PT_POINTS|BGFX_STATE_POINT_SIZE_MASK) & changedFlags)
GL_CHECK(glPointSize(pointSize) ); {
} float pointSize = (float)(bx::uint32_max(1, (newFlags&BGFX_STATE_POINT_SIZE_MASK)>>BGFX_STATE_POINT_SIZE_SHIFT) );
GL_CHECK(glPointSize(pointSize) );
}
if (BGFX_STATE_MSAA & changedFlags) if (BGFX_STATE_MSAA & changedFlags)
{ {
GL_CHECK(BGFX_STATE_MSAA & newFlags GL_CHECK(BGFX_STATE_MSAA & newFlags
? glEnable(GL_MULTISAMPLE) ? glEnable(GL_MULTISAMPLE)
: glDisable(GL_MULTISAMPLE) : glDisable(GL_MULTISAMPLE)
); );
} }
if (BGFX_STATE_LINEAA & changedFlags) if (BGFX_STATE_LINEAA & changedFlags)
{ {
GL_CHECK(BGFX_STATE_LINEAA & newFlags GL_CHECK(BGFX_STATE_LINEAA & newFlags
? glEnable(GL_LINE_SMOOTH) ? glEnable(GL_LINE_SMOOTH)
: glDisable(GL_LINE_SMOOTH) : glDisable(GL_LINE_SMOOTH)
); );
} }
if (m_conservativeRasterSupport if (m_conservativeRasterSupport
&& BGFX_STATE_CONSERVATIVE_RASTER & changedFlags) && BGFX_STATE_CONSERVATIVE_RASTER & changedFlags)
{ {
GL_CHECK(BGFX_STATE_CONSERVATIVE_RASTER & newFlags GL_CHECK(BGFX_STATE_CONSERVATIVE_RASTER & newFlags
? glEnable(GL_CONSERVATIVE_RASTERIZATION_NV) ? glEnable(GL_CONSERVATIVE_RASTERIZATION_NV)
: glDisable(GL_CONSERVATIVE_RASTERIZATION_NV) : glDisable(GL_CONSERVATIVE_RASTERIZATION_NV)
); );
}
} }
#endif // BGFX_CONFIG_RENDERER_OPENGL
if ( (BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE) & changedFlags) if ( (BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE) & changedFlags)
{ {
@ -6804,7 +6820,7 @@ namespace bgfx { namespace gl
blendFactor = draw.m_rgba; blendFactor = draw.m_rgba;
} }
const uint64_t pt = _render->m_debug&BGFX_DEBUG_WIREFRAME ? BGFX_STATE_PT_LINES : newFlags&BGFX_STATE_PT_MASK; const uint64_t pt = newFlags&BGFX_STATE_PT_MASK;
primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT); primIndex = uint8_t(pt>>BGFX_STATE_PT_SHIFT);
prim = s_primInfo[primIndex]; prim = s_primInfo[primIndex];
} }

View File

@ -915,6 +915,22 @@ typedef uint64_t GLuint64;
# define GL_DEBUG_SEVERITY_NOTIFICATION 0x826b # define GL_DEBUG_SEVERITY_NOTIFICATION 0x826b
#endif // GL_DEBUG_SEVERITY_NOTIFICATION #endif // GL_DEBUG_SEVERITY_NOTIFICATION
#ifndef GL_LINE
# define GL_LINE 0x1B01
#endif // GL_LINE
#ifndef GL_FILL
# define GL_FILL 0x1B02
#endif // GL_FILL
#ifndef GL_MULTISAMPLE
# define GL_MULTISAMPLE 0x809D
#endif // GL_MULTISAMPLE
#ifndef GL_LINE_SMOOTH
# define GL_LINE_SMOOTH 0x0B20
#endif // GL_LINE_SMOOTH
#if BX_PLATFORM_NACL #if BX_PLATFORM_NACL
# include "glcontext_ppapi.h" # include "glcontext_ppapi.h"
#elif BX_PLATFORM_WINDOWS #elif BX_PLATFORM_WINDOWS