mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2024-11-25 00:58:30 -05:00
GL/GLES: vsync.
This commit is contained in:
parent
3ed331220f
commit
2ef508139f
11 changed files with 42 additions and 15 deletions
|
@ -70,6 +70,11 @@ inline bool processEvents(uint32_t& _width, uint32_t& _height, uint32_t& _debug,
|
|||
bgfx::setDebug(_debug);
|
||||
return false;
|
||||
}
|
||||
else if (key->m_key == Key::F7)
|
||||
{
|
||||
_reset ^= BGFX_RESET_VSYNC;
|
||||
reset = true;
|
||||
}
|
||||
else if (key->m_key == Key::F8)
|
||||
{
|
||||
_reset ^= BGFX_RESET_MSAA_X16;
|
||||
|
|
|
@ -77,6 +77,8 @@ namespace bgfx
|
|||
success = eglMakeCurrent(m_display, m_surface, m_surface, m_context);
|
||||
BGFX_FATAL(success, Fatal::UnableToInitialize, "Failed to set context.");
|
||||
|
||||
eglSwapInterval(m_display, 0);
|
||||
|
||||
# if BX_PLATFORM_EMSCRIPTEN
|
||||
emscripten_set_canvas_size(_width, _height);
|
||||
# endif // BX_PLATFORM_EMSCRIPTEN
|
||||
|
@ -93,8 +95,9 @@ namespace bgfx
|
|||
m_context = NULL;
|
||||
}
|
||||
|
||||
void GlContext::resize(uint32_t /*_width*/, uint32_t /*_height*/)
|
||||
void GlContext::resize(uint32_t /*_width*/, uint32_t /*_height*/, bool _vsync)
|
||||
{
|
||||
eglSwapInterval(m_display, _vsync ? 1 : 0);
|
||||
}
|
||||
|
||||
void GlContext::swap()
|
||||
|
|
|
@ -23,7 +23,7 @@ namespace bgfx
|
|||
|
||||
void create(uint32_t _width, uint32_t _height);
|
||||
void destroy();
|
||||
void resize(uint32_t _width, uint32_t _height);
|
||||
void resize(uint32_t _width, uint32_t _height, bool _vsync);
|
||||
void swap();
|
||||
void import();
|
||||
|
||||
|
|
|
@ -12,6 +12,10 @@
|
|||
|
||||
namespace bgfx
|
||||
{
|
||||
PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB;
|
||||
PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT;
|
||||
PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI;
|
||||
|
||||
# define GL_IMPORT(_optional, _proto, _func) _proto _func
|
||||
# include "glimports.h"
|
||||
# undef GL_IMPORT
|
||||
|
@ -119,7 +123,7 @@ namespace bgfx
|
|||
XFree(visualInfo);
|
||||
|
||||
#if BGFX_CONFIG_RENDERER_OPENGL >= 31
|
||||
PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress( (const GLubyte*)"glXCreateContextAttribsARB");
|
||||
glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)glXGetProcAddress( (const GLubyte*)"glXCreateContextAttribsARB");
|
||||
if (NULL != glXCreateContextAttribsARB)
|
||||
{
|
||||
BX_TRACE("Create GL 3.1 context.");
|
||||
|
@ -147,7 +151,7 @@ namespace bgfx
|
|||
|
||||
import();
|
||||
|
||||
PFNGLXSWAPINTERVALEXTPROC glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)glXGetProcAddress( (const GLubyte*)"glXSwapIntervalEXT");
|
||||
glXSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)glXGetProcAddress( (const GLubyte*)"glXSwapIntervalEXT");
|
||||
if (NULL != glXSwapIntervalEXT)
|
||||
{
|
||||
BX_TRACE("Using glXSwapIntervalEXT.");
|
||||
|
@ -155,7 +159,7 @@ namespace bgfx
|
|||
}
|
||||
else
|
||||
{
|
||||
PFNGLXSWAPINTERVALSGIPROC glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glXGetProcAddress( (const GLubyte*)"glXSwapIntervalSGI");
|
||||
glXSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)glXGetProcAddress( (const GLubyte*)"glXSwapIntervalSGI");
|
||||
if (NULL != glXSwapIntervalSGI)
|
||||
{
|
||||
BX_TRACE("Using glXSwapIntervalSGI.");
|
||||
|
@ -176,8 +180,18 @@ namespace bgfx
|
|||
glXDestroyContext(s_display, m_context);
|
||||
}
|
||||
|
||||
void GlContext::resize(uint32_t _width, uint32_t _height)
|
||||
void GlContext::resize(uint32_t /*_width*/, uint32_t /*_height*/, bool _vsync)
|
||||
{
|
||||
int32_t interval = _vsync ? 1 : 0;
|
||||
|
||||
if (NULL != glXSwapIntervalEXT)
|
||||
{
|
||||
glXSwapIntervalEXT(s_display, 0, interval);
|
||||
}
|
||||
else if (NULL != glXSwapIntervalSGI)
|
||||
{
|
||||
glXSwapIntervalSGI(interval);
|
||||
}
|
||||
}
|
||||
|
||||
void GlContext::swap()
|
||||
|
|
|
@ -22,7 +22,7 @@ namespace bgfx
|
|||
|
||||
void create(uint32_t _width, uint32_t _height);
|
||||
void destroy();
|
||||
void resize(uint32_t _width, uint32_t _height);
|
||||
void resize(uint32_t _width, uint32_t _height, bool _vsync);
|
||||
void swap();
|
||||
void import();
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@ namespace bgfx
|
|||
|
||||
void create(uint32_t _width, uint32_t _height);
|
||||
void destroy();
|
||||
void resize(uint32_t _width, uint32_t _height);
|
||||
void resize(uint32_t _width, uint32_t _height, bool _vsync);
|
||||
void swap();
|
||||
void import();
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ namespace bgfx
|
|||
{
|
||||
}
|
||||
|
||||
void GlContext::resize(uint32_t _width, uint32_t _height)
|
||||
void GlContext::resize(uint32_t _width, uint32_t _height, bool /*_vsync*/)
|
||||
{
|
||||
m_graphicsInterface->ResizeBuffers(m_context, _width, _height);
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ namespace bgfx
|
|||
|
||||
void create(uint32_t _width, uint32_t _height);
|
||||
void destroy();
|
||||
void resize(uint32_t _width, uint32_t _height);
|
||||
void resize(uint32_t _width, uint32_t _height, bool _vsync);
|
||||
void swap();
|
||||
void import();
|
||||
|
||||
|
|
|
@ -238,8 +238,12 @@ namespace bgfx
|
|||
m_opengl32dll = NULL;
|
||||
}
|
||||
|
||||
void GlContext::resize(uint32_t /*_width*/, uint32_t /*_height*/)
|
||||
void GlContext::resize(uint32_t /*_width*/, uint32_t /*_height*/, bool _vsync)
|
||||
{
|
||||
if (NULL != wglSwapIntervalEXT)
|
||||
{
|
||||
wglSwapIntervalEXT(_vsync ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
void GlContext::swap()
|
||||
|
|
|
@ -66,7 +66,7 @@ namespace bgfx
|
|||
|
||||
void create(uint32_t _width, uint32_t _height);
|
||||
void destroy();
|
||||
void resize(uint32_t _width, uint32_t _height);
|
||||
void resize(uint32_t _width, uint32_t _height, bool _vsync);
|
||||
void swap();
|
||||
void import();
|
||||
|
||||
|
|
|
@ -291,7 +291,8 @@ namespace bgfx
|
|||
|
||||
uint32_t msaa = 1<<( (m_resolution.m_flags&BGFX_RESET_MSAA_MASK)>>BGFX_RESET_MSAA_SHIFT);
|
||||
msaa = uint32_min(m_maxMsaa, msaa == 0 ? 0 : 1<<msaa);
|
||||
setRenderContextSize(_resolution.m_width, _resolution.m_height, msaa);
|
||||
bool vsync = !!(m_resolution.m_flags&BGFX_RESET_VSYNC);
|
||||
setRenderContextSize(_resolution.m_width, _resolution.m_height, msaa, vsync);
|
||||
updateCapture();
|
||||
}
|
||||
}
|
||||
|
@ -393,7 +394,7 @@ namespace bgfx
|
|||
#endif // BGFX_CONFIG_RENDERER_OPENGL|BGFX_CONFIG_RENDERER_OPENGLES3
|
||||
}
|
||||
|
||||
void setRenderContextSize(uint32_t _width, uint32_t _height, uint32_t _msaa = 0)
|
||||
void setRenderContextSize(uint32_t _width, uint32_t _height, uint32_t _msaa = 0, bool _vsync = false)
|
||||
{
|
||||
if (_width != 0
|
||||
|| _height != 0)
|
||||
|
@ -406,7 +407,7 @@ namespace bgfx
|
|||
{
|
||||
destroyMsaaFbo();
|
||||
|
||||
m_glctx.resize(_width, _height);
|
||||
m_glctx.resize(_width, _height, _vsync);
|
||||
|
||||
createMsaaFbo(_width, _height, _msaa);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue