From 752f3deee7523e508075b4e9a3ca8feb0810c5ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Tue, 18 Oct 2016 20:36:41 -0700 Subject: [PATCH 1/3] Fixed issue #952. --- src/glimports.h | 6 +++- src/renderer_gl.cpp | 74 +++++++++++++++++++++++++++------------------ src/renderer_gl.h | 16 ++++++++++ 3 files changed, 66 insertions(+), 30 deletions(-) diff --git a/src/glimports.h b/src/glimports.h index 40781f43d..dfc345af7 100644 --- a/src/glimports.h +++ b/src/glimports.h @@ -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 PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); 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 PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); 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 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, PFNGLDEBUGMESSAGEINSERTPROC, glDebugMessageInsert); @@ -467,6 +469,8 @@ GL_IMPORT______(true, PFNGLFRAMETERMINATORGREMEDYPROC, glFrameTermin GL_IMPORT______(true, PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC, glGetTranslatedShaderSourceANGLE); #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, PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC, glRenderbufferStorageMultisample); diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index d067fe01a..9351d1fd9 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -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); static const char* getGLString(GLenum _name) @@ -1928,6 +1932,11 @@ namespace bgfx { namespace gl : 0 ; + if (NULL == glPolygonMode) + { + glPolygonMode = stubPolygonMode; + } + if (s_extension[Extension::ARB_copy_image].m_supported || s_extension[Extension::EXT_copy_image].m_supported || s_extension[Extension:: NV_copy_image].m_supported @@ -6139,11 +6148,17 @@ namespace bgfx { namespace gl 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); } 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; GLuint currentVao = 0; bool wasCompute = false; @@ -6643,38 +6658,39 @@ namespace bgfx { namespace gl viewState.m_alphaRef = ref/255.0f; } -#if BGFX_CONFIG_RENDERER_OPENGL - if ( (BGFX_STATE_PT_POINTS|BGFX_STATE_POINT_SIZE_MASK) & changedFlags) + if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) ) { - 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_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) ); + GL_CHECK(glPointSize(pointSize) ); + } - if (BGFX_STATE_MSAA & changedFlags) - { - GL_CHECK(BGFX_STATE_MSAA & newFlags - ? glEnable(GL_MULTISAMPLE) - : glDisable(GL_MULTISAMPLE) - ); - } + if (BGFX_STATE_MSAA & changedFlags) + { + GL_CHECK(BGFX_STATE_MSAA & newFlags + ? glEnable(GL_MULTISAMPLE) + : glDisable(GL_MULTISAMPLE) + ); + } - if (BGFX_STATE_LINEAA & changedFlags) - { - GL_CHECK(BGFX_STATE_LINEAA & newFlags - ? glEnable(GL_LINE_SMOOTH) - : glDisable(GL_LINE_SMOOTH) - ); - } + if (BGFX_STATE_LINEAA & changedFlags) + { + GL_CHECK(BGFX_STATE_LINEAA & newFlags + ? glEnable(GL_LINE_SMOOTH) + : glDisable(GL_LINE_SMOOTH) + ); + } - if (m_conservativeRasterSupport - && BGFX_STATE_CONSERVATIVE_RASTER & changedFlags) - { - GL_CHECK(BGFX_STATE_CONSERVATIVE_RASTER & newFlags - ? glEnable(GL_CONSERVATIVE_RASTERIZATION_NV) - : glDisable(GL_CONSERVATIVE_RASTERIZATION_NV) - ); + if (m_conservativeRasterSupport + && BGFX_STATE_CONSERVATIVE_RASTER & changedFlags) + { + GL_CHECK(BGFX_STATE_CONSERVATIVE_RASTER & newFlags + ? glEnable(GL_CONSERVATIVE_RASTERIZATION_NV) + : glDisable(GL_CONSERVATIVE_RASTERIZATION_NV) + ); + } } -#endif // BGFX_CONFIG_RENDERER_OPENGL if ( (BGFX_STATE_ALPHA_WRITE|BGFX_STATE_RGB_WRITE) & changedFlags) { @@ -6804,7 +6820,7 @@ namespace bgfx { namespace gl 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); prim = s_primInfo[primIndex]; } diff --git a/src/renderer_gl.h b/src/renderer_gl.h index 733d55062..664b4b186 100644 --- a/src/renderer_gl.h +++ b/src/renderer_gl.h @@ -915,6 +915,22 @@ typedef uint64_t GLuint64; # define GL_DEBUG_SEVERITY_NOTIFICATION 0x826b #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 # include "glcontext_ppapi.h" #elif BX_PLATFORM_WINDOWS From dc5a3e6e6c1b77176f56785ff7821914539d4e86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Tue, 18 Oct 2016 21:01:11 -0700 Subject: [PATCH 2/3] Fixed leak. --- examples/15-shadowmaps-simple/shadowmaps_simple.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/15-shadowmaps-simple/shadowmaps_simple.cpp b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp index 10201030e..274e5f404 100644 --- a/examples/15-shadowmaps-simple/shadowmaps_simple.cpp +++ b/examples/15-shadowmaps-simple/shadowmaps_simple.cpp @@ -385,6 +385,7 @@ int _main_(int _argc, char** _argv) bgfx::destroyUniform(u_shadowMap); bgfx::destroyUniform(u_lightPos); bgfx::destroyUniform(u_lightMtx); + bgfx::destroyUniform(u_depthScaleOffset); // Shutdown bgfx. bgfx::shutdown(); From 25e38b033a3ad3ac54288e8742e4e405ff5767b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Wed, 19 Oct 2016 08:47:24 -0700 Subject: [PATCH 3/3] Updated docs. --- include/bgfx/bgfx.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/bgfx/bgfx.h b/include/bgfx/bgfx.h index 02ea5d4fe..8d2d6ea00 100644 --- a/include/bgfx/bgfx.h +++ b/include/bgfx/bgfx.h @@ -1077,6 +1077,8 @@ namespace bgfx /// Returns performance counters. /// + /// @attention C99 equivalent is `bgfx_get_stats`. + /// const Stats* getStats(); /// Allocate buffer to pass to bgfx calls. Data will be freed inside bgfx.