From 928800feab95d7bc3f4680d91c3e4754c852d783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Sat, 24 Jun 2023 08:13:00 -0700 Subject: [PATCH] macOS, iOS: Removed OpenGL/OpenGLES support. --- src/config.h | 2 - src/glcontext_eagl.h | 62 ------- src/glcontext_eagl.mm | 375 ---------------------------------------- src/glcontext_nsgl.h | 51 ------ src/glcontext_nsgl.mm | 394 ------------------------------------------ src/glimports.h | 8 +- src/renderer_gl.cpp | 54 ++---- src/renderer_gl.h | 37 +--- 8 files changed, 19 insertions(+), 964 deletions(-) delete mode 100644 src/glcontext_eagl.h delete mode 100644 src/glcontext_eagl.mm delete mode 100644 src/glcontext_nsgl.h delete mode 100644 src/glcontext_nsgl.mm diff --git a/src/config.h b/src/config.h index 678d1f5b8..36fb4ebad 100644 --- a/src/config.h +++ b/src/config.h @@ -90,7 +90,6 @@ # define BGFX_CONFIG_RENDERER_OPENGL (0 \ || BX_PLATFORM_BSD \ || BX_PLATFORM_LINUX \ - || BX_PLATFORM_OSX \ || BX_PLATFORM_WINDOWS \ ? BGFX_CONFIG_RENDERER_OPENGL_MIN_VERSION : 0) # endif // BGFX_CONFIG_RENDERER_OPENGL @@ -105,7 +104,6 @@ # define BGFX_CONFIG_RENDERER_OPENGLES (0 \ || BX_PLATFORM_ANDROID \ || BX_PLATFORM_EMSCRIPTEN \ - || BX_PLATFORM_IOS \ || BX_PLATFORM_RPI \ || BX_PLATFORM_NX \ ? BGFX_CONFIG_RENDERER_OPENGLES_MIN_VERSION : 0) diff --git a/src/glcontext_eagl.h b/src/glcontext_eagl.h deleted file mode 100644 index 7de2210f5..000000000 --- a/src/glcontext_eagl.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2011-2023 Branimir Karadzic. All rights reserved. - * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE - */ - -#ifndef BGFX_GLCONTEXT_EAGL_H_HEADER_GUARD -#define BGFX_GLCONTEXT_EAGL_H_HEADER_GUARD - -#if BX_PLATFORM_IOS - -namespace bgfx { namespace gl -{ - struct SwapChainGL; - - struct GlContext - { - GlContext() - : m_current(0) - , m_context(0) - , m_fbo(0) - , m_colorRbo(0) - , m_depthStencilRbo(0) - , m_msaaContext(false) - { - } - - void create(uint32_t _width, uint32_t _height, uint32_t _flags); - void destroy(); - void resize(uint32_t _width, uint32_t _height, uint32_t _flags); - - uint64_t getCaps() const; - SwapChainGL* createSwapChain(void* _nwh); - void destroySwapChain(SwapChainGL* _swapChain); - void swap(SwapChainGL* _swapChain = NULL); - void makeCurrent(SwapChainGL* _swapChain = NULL); - - void import(); - - GLuint getFbo() - { - return m_fbo; - } - - bool isValid() const - { - return 0 != m_context; - } - - SwapChainGL* m_current; - void* m_context; - - GLuint m_fbo; - GLuint m_colorRbo; - GLuint m_depthStencilRbo; - // true when MSAA is handled by the context instead of using MSAA FBO - bool m_msaaContext; - }; -} /* namespace gl */ } // namespace bgfx - -#endif // BX_PLATFORM_IOS - -#endif // BGFX_GLCONTEXT_EAGL_H_HEADER_GUARD diff --git a/src/glcontext_eagl.mm b/src/glcontext_eagl.mm deleted file mode 100644 index 070f7f566..000000000 --- a/src/glcontext_eagl.mm +++ /dev/null @@ -1,375 +0,0 @@ -/* - * Copyright 2011-2023 Branimir Karadzic. All rights reserved. - * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE - */ - -#include "bgfx_p.h" - -#if BX_PLATFORM_IOS && (BGFX_CONFIG_RENDERER_OPENGLES|BGFX_CONFIG_RENDERER_OPENGL) -# include -# include -# include "renderer_gl.h" - -namespace bgfx { namespace gl -{ -# define GL_IMPORT(_optional, _proto, _func, _import) _proto _func = NULL -# include "glimports.h" - - static void* s_opengles = NULL; - - struct SwapChainGL - { - SwapChainGL(EAGLContext *_context, CAEAGLLayer *_layer) - : m_context(_context) - , m_fbo(0) - , m_colorRbo(0) - , m_depthStencilRbo(0) - { - _layer.contentsScale = [UIScreen mainScreen].scale; - - _layer.opaque = [_layer.style valueForKey:@"opaque"] == nil - ? true - : [[_layer.style valueForKey:@"opaque"] boolValue] - ; - - _layer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys - : [NSNumber numberWithBool:false] - , kEAGLDrawablePropertyRetainedBacking - , kEAGLColorFormatRGBA8 - , kEAGLDrawablePropertyColorFormat - , nil - ]; - - [EAGLContext setCurrentContext:_context]; - - GL_CHECK(glGenFramebuffers(1, &m_fbo) ); - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_fbo) ); - - GL_CHECK(glGenRenderbuffers(1, &m_colorRbo) ); - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_colorRbo) ); - - [_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:_layer]; - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorRbo) ); - - GLint width; - GLint height; - GL_CHECK(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width) ); - GL_CHECK(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height) ); - BX_TRACE("Screen size: %d x %d", width, height); - - m_width = width; - m_height = height; - m_layer = _layer; - - createFrameBuffers(m_width, m_height); - } - - ~SwapChainGL() - { - destroyFrameBuffers(); - } - - void destroyFrameBuffers() - { - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, 0) ); - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, 0) ); - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, 0) ); - if (0 != m_fbo) - { - GL_CHECK(glDeleteFramebuffers(1, &m_fbo) ); - m_fbo = 0; - } - - if (0 != m_colorRbo) - { - GL_CHECK(glDeleteRenderbuffers(1, &m_colorRbo) ); - m_colorRbo = 0; - } - - if (0 != m_depthStencilRbo) - { - GL_CHECK(glDeleteRenderbuffers(1, &m_depthStencilRbo) ); - m_depthStencilRbo = 0; - } - } - - void createFrameBuffers(GLint _width, GLint _height) - { - GL_CHECK(glGenRenderbuffers(1, &m_depthStencilRbo) ); - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_depthStencilRbo) ); - GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, _width, _height) ); - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) ); - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) ); - - GLenum err = glCheckFramebufferStatus(GL_FRAMEBUFFER); - BX_ASSERT(GL_FRAMEBUFFER_COMPLETE == err, "glCheckFramebufferStatus failed 0x%08x", err); - BX_UNUSED(err); - - makeCurrent(); - - GL_CHECK(glClearColor(0.0f, 0.0f, 0.0f, 0.0f) ); - GL_CHECK(glClear(GL_COLOR_BUFFER_BIT) ); - - swapBuffers(); - - GL_CHECK(glClear(GL_COLOR_BUFFER_BIT) ); - - swapBuffers(); - } - - void makeCurrent() - { - [EAGLContext setCurrentContext:m_context]; - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_fbo) ); - - GLint newWidth = m_layer.bounds.size.width*[UIScreen mainScreen].scale; - GLint newHeight = m_layer.bounds.size.height*[UIScreen mainScreen].scale; - resize(newWidth, newHeight); - } - - void resize(GLint _width, GLint _height) - { - if (m_width == _width - && m_height == _height) - { - return; - } - - destroyFrameBuffers(); - - m_width = _width; - m_height = _height; - - createFrameBuffers(m_width, m_height); - } - - void swapBuffers() - { - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_colorRbo) ); - [m_context presentRenderbuffer:GL_RENDERBUFFER]; - } - - EAGLContext* m_context; - - CAEAGLLayer *m_layer; - GLuint m_fbo; - GLuint m_colorRbo; - GLuint m_depthStencilRbo; - GLint m_width; - GLint m_height; - }; - - void GlContext::create(uint32_t _width, uint32_t _height, uint32_t /*_flags*/) - { - s_opengles = bx::dlopen("/System/Library/Frameworks/OpenGLES.framework/OpenGLES"); - BX_ASSERT(NULL != s_opengles, "OpenGLES dynamic library is not found!"); - - BX_UNUSED(_width, _height); - CAEAGLLayer* layer = (__bridge CAEAGLLayer*)g_platformData.nwh; - layer.opaque = [layer.style valueForKey:@"opaque"] == nil ? true : [[layer.style valueForKey:@"opaque"] boolValue]; - - layer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys - : [NSNumber numberWithBool:false] - , kEAGLDrawablePropertyRetainedBacking - , kEAGLColorFormatRGBA8 - , kEAGLDrawablePropertyColorFormat - , nil - ]; - - EAGLContext* context = (__bridge EAGLContext*)g_platformData.context; - if (NULL == context) - { - context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3]; - if (NULL == context) - { - context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; - } - } - BX_ASSERT(NULL != context, "No valid OpenGLES context."); - - m_context = (__bridge void*)context; - [EAGLContext setCurrentContext:context]; - [CATransaction flush]; - - GL_CHECK(glGenFramebuffers(1, &m_fbo) ); - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_fbo) ); - - GL_CHECK(glGenRenderbuffers(1, &m_colorRbo) ); - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_colorRbo) ); - - [context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]; - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorRbo) ); - - GLint width; - GLint height; - GL_CHECK(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width) ); - GL_CHECK(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height) ); - BX_TRACE("Screen size: %d x %d", width, height); - - GL_CHECK(glGenRenderbuffers(1, &m_depthStencilRbo) ); - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_depthStencilRbo) ); - GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height) ); - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) ); - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) ); - - BX_ASSERT(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER) - , "glCheckFramebufferStatus failed 0x%08x" - , glCheckFramebufferStatus(GL_FRAMEBUFFER) - ); - - makeCurrent(); - GL_CHECK(glClearColor(0.0f, 0.0f, 0.0f, 0.0f) ); - GL_CHECK(glClear(GL_COLOR_BUFFER_BIT) ); - swap(NULL); - GL_CHECK(glClear(GL_COLOR_BUFFER_BIT) ); - swap(NULL); - - import(); - - g_internalData.context = m_context; - } - - void GlContext::destroy() - { - if (0 != m_fbo) - { - GL_CHECK(glDeleteFramebuffers(1, &m_fbo) ); - m_fbo = 0; - } - - if (0 != m_colorRbo) - { - GL_CHECK(glDeleteRenderbuffers(1, &m_colorRbo) ); - m_colorRbo = 0; - } - - if (0 != m_depthStencilRbo) - { - GL_CHECK(glDeleteRenderbuffers(1, &m_depthStencilRbo) ); - m_depthStencilRbo = 0; - } - - EAGLContext* context = (__bridge EAGLContext*)m_context; - - bx::dlclose(s_opengles); - } - - void GlContext::resize(uint32_t _width, uint32_t _height, uint32_t _flags) - { - BX_UNUSED(_width, _height, _flags); - BX_TRACE("resize context"); - - if (0 != m_fbo) - { - GL_CHECK(glDeleteFramebuffers(1, &m_fbo) ); - m_fbo = 0; - } - - if (0 != m_colorRbo) - { - GL_CHECK(glDeleteRenderbuffers(1, &m_colorRbo) ); - m_colorRbo = 0; - } - - if (0 != m_depthStencilRbo) - { - GL_CHECK(glDeleteRenderbuffers(1, &m_depthStencilRbo) ); - m_depthStencilRbo = 0; - } - - GL_CHECK(glGenFramebuffers(1, &m_fbo) ); - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_fbo) ); - - GL_CHECK(glGenRenderbuffers(1, &m_colorRbo) ); - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_colorRbo) ); - - [((__bridge EAGLContext*)m_context) renderbufferStorage:GL_RENDERBUFFER fromDrawable:(__bridge CAEAGLLayer*)g_platformData.nwh]; - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorRbo) ); - - GLint width; - GLint height; - GL_CHECK(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width) ); - GL_CHECK(glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height) ); - BX_TRACE("Screen size: %d x %d", width, height); - - GL_CHECK(glGenRenderbuffers(1, &m_depthStencilRbo) ); - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_depthStencilRbo) ); - GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height) ); - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) ); - GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) ); - - BX_ASSERT(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER) - , "glCheckFramebufferStatus failed 0x%08x" - , glCheckFramebufferStatus(GL_FRAMEBUFFER) - ); - } - - uint64_t GlContext::getCaps() const - { - return BGFX_CAPS_SWAP_CHAIN; - } - - SwapChainGL* GlContext::createSwapChain(void* _nwh) - { - return BX_NEW(g_allocator, SwapChainGL)(/*m_display, m_config,*/ (__bridge EAGLContext*)m_context, (__bridge CAEAGLLayer*)_nwh); - } - - void GlContext::destroySwapChain(SwapChainGL* _swapChain) - { - bx::deleteObject(g_allocator, _swapChain); - } - - void GlContext::swap(SwapChainGL* _swapChain) - { - makeCurrent(_swapChain); - - if (NULL == _swapChain) - { - GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_colorRbo) ); - EAGLContext* context = (__bridge EAGLContext*)m_context; - [context presentRenderbuffer:GL_RENDERBUFFER]; - } - else - { - _swapChain->swapBuffers(); - } - } - - void GlContext::makeCurrent(SwapChainGL* _swapChain) - { - if (m_current != _swapChain) - { - m_current = _swapChain; - - if (NULL == _swapChain) - { - [EAGLContext setCurrentContext:(__bridge EAGLContext*)m_context]; - GL_CHECK(glBindFramebuffer(GL_FRAMEBUFFER, m_fbo) ); - } - else - { - _swapChain->makeCurrent(); - } - } - } - - void GlContext::import() - { - BX_TRACE("Import:"); -# define GL_EXTENSION(_optional, _proto, _func, _import) \ - { \ - if (_func == NULL) \ - { \ - _func = (_proto)bx::dlsym(s_opengles, #_import); \ - BX_TRACE("%p " #_func " (" #_import ")", _func); \ - } \ - BGFX_FATAL(_optional || NULL != _func, Fatal::UnableToInitialize \ - , "Failed to create OpenGLES context. EAGLGetProcAddress(\"%s\")" \ - , #_import); \ - } -# include "glimports.h" - } - -} /* namespace gl */ } // namespace bgfx - -#endif // BX_PLATFORM_IOS && (BGFX_CONFIG_RENDERER_OPENGLES|BGFX_CONFIG_RENDERER_OPENGL) diff --git a/src/glcontext_nsgl.h b/src/glcontext_nsgl.h deleted file mode 100644 index 03a93d690..000000000 --- a/src/glcontext_nsgl.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2011-2023 Branimir Karadzic. All rights reserved. - * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE - */ - -#ifndef BGFX_GLCONTEXT_NSGL_H_HEADER_GUARD -#define BGFX_GLCONTEXT_NSGL_H_HEADER_GUARD - -#if BX_PLATFORM_OSX - -namespace bgfx { namespace gl -{ - struct SwapChainGL; - - struct GlContext - { - GlContext() - : m_context(NULL) - , m_view(NULL) - , m_msaaContext(false) - { - } - - void create(uint32_t _width, uint32_t _height, uint32_t _flags); - void destroy(); - void resize(uint32_t _width, uint32_t _height, uint32_t _flags); - - uint64_t getCaps() const; - SwapChainGL* createSwapChain(void* _nwh); - void destroySwapChain(SwapChainGL* _swapChain); - void swap(SwapChainGL* _swapChain = NULL); - void makeCurrent(SwapChainGL* _swapChain = NULL); - - void import(); - - bool isValid() const - { - return NULL != m_context; - } - - void* m_context; - void* m_view; - // true when MSAA is handled by the context instead of using MSAA FBO - bool m_msaaContext; - - }; -} /* namespace gl */ } // namespace bgfx - -#endif // BX_PLATFORM_OSX - -#endif // BGFX_GLCONTEXT_NSGL_H_HEADER_GUARD diff --git a/src/glcontext_nsgl.mm b/src/glcontext_nsgl.mm deleted file mode 100644 index 0bed6f52b..000000000 --- a/src/glcontext_nsgl.mm +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright 2011-2023 Branimir Karadzic. All rights reserved. - * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE - */ - -#include "bgfx_p.h" - -#if BX_PLATFORM_OSX && (BGFX_CONFIG_RENDERER_OPENGLES || BGFX_CONFIG_RENDERER_OPENGL) -# include "renderer_gl.h" -# include -# include -# include - -BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG("-Wdeprecated-declarations") - -namespace bgfx { namespace gl -{ - -# define GL_IMPORT(_optional, _proto, _func, _import) _proto _func -# include "glimports.h" - - struct SwapChainGL - { - SwapChainGL(void* _nwh,NSOpenGLContext *_context) - { - NSObject* nwh=(NSObject*)_nwh; - - NSWindow* nsWindow = nil; - NSView* contentView = nil; - if ([nwh isKindOfClass:[NSView class]]) - { - contentView = (NSView*)nwh; - } - else if ([nwh isKindOfClass:[NSWindow class]]) - { - nsWindow = (NSWindow*)nwh; - contentView = [nsWindow contentView]; - } - -#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - NSOpenGLPixelFormatAttribute profile = -#if BGFX_CONFIG_RENDERER_OPENGL >= 31 - NSOpenGLProfileVersion3_2Core -#else - NSOpenGLProfileVersionLegacy -#endif // BGFX_CONFIG_RENDERER_OPENGL >= 31 - ; -#endif // defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - - NSOpenGLPixelFormatAttribute pixelFormatAttributes[] = { -#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - NSOpenGLPFAOpenGLProfile, profile, -#endif // defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - NSOpenGLPFAColorSize, 24, - NSOpenGLPFAAlphaSize, 8, - NSOpenGLPFADepthSize, 24, - NSOpenGLPFAStencilSize, 8, - NSOpenGLPFADoubleBuffer, true, - NSOpenGLPFAAccelerated, true, - NSOpenGLPFANoRecovery, true, - 0, 0, - }; - - NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes]; - BGFX_FATAL(NULL != pixelFormat, Fatal::UnableToInitialize, "Failed to initialize pixel format."); - - NSRect glViewRect = [contentView bounds]; - NSOpenGLView* glView = [[NSOpenGLView alloc] initWithFrame:glViewRect pixelFormat:pixelFormat]; - - - // GLFW creates a helper contentView that handles things like keyboard and drag and - // drop events. We don't want to clobber that view if it exists. Instead we just - // add ourselves as a subview and make the view resize automatically. - if (nil != contentView) - { - [glView setAutoresizingMask:( NSViewHeightSizable | - NSViewWidthSizable | - NSViewMinXMargin | - NSViewMaxXMargin | - NSViewMinYMargin | - NSViewMaxYMargin )]; - [contentView addSubview:glView]; - } - else - { - if (nil != nsWindow) - [nsWindow setContentView:glView]; - } - - NSOpenGLContext* glContext = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:_context]; - BGFX_FATAL(NULL != glContext, Fatal::UnableToInitialize, "Failed to initialize GL context."); - - void (^attachBlock)(void) = ^(void) { - [glView setOpenGLContext: glContext]; - [glContext setView:glView]; - }; - - if([NSThread isMainThread]) - { - attachBlock(); - } - else - { - dispatch_sync(dispatch_get_main_queue(),attachBlock); - } - - [pixelFormat release]; - - [glContext makeCurrentContext]; - GLint interval = 0; - [glContext setValues:&interval forParameter:NSOpenGLCPSwapInterval]; - - - m_view = glView; - m_context = glContext; - } - - ~SwapChainGL() - { - if(m_context!=nil) [m_context release]; - if(m_view!=nil) [m_view release]; - } - - void makeCurrent() - { - [m_context makeCurrentContext]; - } - - void swapBuffers() - { - [m_context makeCurrentContext]; - [m_context flushBuffer]; - } - - NSOpenGLView *m_view; - NSOpenGLContext *m_context; - }; - - class AutoreleasePoolHolder - { - public: - AutoreleasePoolHolder() : m_pool([[NSAutoreleasePool alloc] init]) - { - } - - ~AutoreleasePoolHolder() - { - [m_pool release]; - } - - private: - AutoreleasePoolHolder(AutoreleasePoolHolder const&); - - NSAutoreleasePool* const m_pool; - }; - - static void* s_opengl = NULL; - - void GlContext::create(uint32_t _width, uint32_t _height, uint32_t /*_flags*/) - { - BX_UNUSED(_width, _height); - - s_opengl = bx::dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"); - BX_ASSERT(NULL != s_opengl, "OpenGL dynamic library is not found!"); - - const AutoreleasePoolHolder pool; - NSObject* nwh = (NSObject*)g_platformData.nwh; - m_context = g_platformData.context; - - NSWindow* nsWindow = nil; - NSView* contentView = nil; - if ([nwh isKindOfClass:[NSView class]]) - { - contentView = (NSView*)nwh; - } - else if ([nwh isKindOfClass:[NSWindow class]]) - { - nsWindow = (NSWindow*)nwh; - contentView = [nsWindow contentView]; - } - - if (NULL == g_platformData.context) - { -#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - NSOpenGLPixelFormatAttribute profile = -#if BGFX_CONFIG_RENDERER_OPENGL >= 31 - NSOpenGLProfileVersion3_2Core -#else - NSOpenGLProfileVersionLegacy -#endif // BGFX_CONFIG_RENDERER_OPENGL >= 31 - ; -#endif // defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - - NSOpenGLPixelFormatAttribute pixelFormatAttributes[] = { -#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - NSOpenGLPFAOpenGLProfile, profile, -#endif // defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - NSOpenGLPFAColorSize, 24, - NSOpenGLPFAAlphaSize, 8, - NSOpenGLPFADepthSize, 24, - NSOpenGLPFAStencilSize, 8, - NSOpenGLPFADoubleBuffer, true, - NSOpenGLPFAAccelerated, true, - NSOpenGLPFANoRecovery, true, - 0, 0, - }; - - NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes]; - BGFX_FATAL(NULL != pixelFormat, Fatal::UnableToInitialize, "Failed to initialize pixel format."); - - NSRect glViewRect = [contentView bounds]; - NSOpenGLView* glView = [[NSOpenGLView alloc] initWithFrame:glViewRect pixelFormat:pixelFormat]; - - [pixelFormat release]; - // GLFW creates a helper contentView that handles things like keyboard and drag and - // drop events. We don't want to clobber that view if it exists. Instead we just - // add ourselves as a subview and make the view resize automatically. - if (nil != contentView) - { - [glView setAutoresizingMask:( NSViewHeightSizable | - NSViewWidthSizable | - NSViewMinXMargin | - NSViewMaxXMargin | - NSViewMinYMargin | - NSViewMaxYMargin )]; - [contentView addSubview:glView]; - } - else - { - if (nil != nsWindow) - [nsWindow setContentView:glView]; - } - - NSOpenGLContext* glContext = [glView openGLContext]; - BGFX_FATAL(NULL != glContext, Fatal::UnableToInitialize, "Failed to initialize GL context."); - - [glContext makeCurrentContext]; - GLint interval = 0; - [glContext setValues:&interval forParameter:NSOpenGLCPSwapInterval]; - - // When initializing NSOpenGLView programmatically (as we are), this sometimes doesn't - // get hooked up properly (especially when there are existing window elements). This ensures - // we are valid. Otherwise, you'll probably get a GL_INVALID_FRAMEBUFFER_OPERATION when - // trying to glClear() for the first time. - void (^set_view)(void) = ^(void) { - [glContext setView:glView]; - }; - - if([NSThread isMainThread]) - { - set_view(); - } - else - { - dispatch_sync(dispatch_get_main_queue(),set_view); - } - - m_view = glView; - m_context = glContext; - } - else - { - [(NSOpenGLContext*)g_platformData.context makeCurrentContext]; - } - - import(); - - g_internalData.context = m_context; - } - - void GlContext::destroy() - { - if (NULL == g_platformData.context) - { - NSOpenGLView* glView = (NSOpenGLView*)m_view; - [glView release]; - } - - m_view = NULL; - m_context = NULL; - bx::dlclose(s_opengl); - } - - void GlContext::resize(uint32_t _width, uint32_t _height, uint32_t _flags) - { - BX_UNUSED(_width, _height); - -#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - bool hidpi = !!(_flags&BGFX_RESET_HIDPI); - if (m_view) - { - NSOpenGLView* glView = (NSOpenGLView*)m_view; - if ([glView respondsToSelector:@selector(setWantsBestResolutionOpenGLSurface:)]) - [glView setWantsBestResolutionOpenGLSurface:hidpi]; - } -#endif // defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - - bool vsync = !!(_flags&BGFX_RESET_VSYNC); - GLint interval = vsync ? 1 : 0; - NSOpenGLContext* glContext = (NSOpenGLContext*)m_context; - [glContext setValues:&interval forParameter:NSOpenGLCPSwapInterval]; - - void (^update_view)(void) = ^(void) { - [glContext update]; - }; - - if([NSThread isMainThread]) - { - update_view(); - } - else - { - dispatch_sync(dispatch_get_main_queue(),update_view); - } - } - - uint64_t GlContext::getCaps() const - { - uint64_t caps = 0; -#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - NSObject* nwh = (NSObject*)g_platformData.nwh; - if ([nwh respondsToSelector:@selector(backingScaleFactor)] && (1.0f < [(id)nwh backingScaleFactor])) - caps |= BGFX_CAPS_HIDPI; -#endif // defined(MAC_OS_X_VERSION_MAX_ALLOWED) && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1070) - caps |= BGFX_CAPS_SWAP_CHAIN; - return caps; - } - - SwapChainGL* GlContext::createSwapChain(void* _nwh) - { - return BX_NEW(g_allocator, SwapChainGL)(_nwh,(NSOpenGLContext*)m_context); - } - - void GlContext::destroySwapChain(SwapChainGL* _swapChain) - { - bx::deleteObject(g_allocator, _swapChain); - } - - void GlContext::swap(SwapChainGL* _swapChain) - { - if (NULL == _swapChain) - { - NSOpenGLContext* glContext = (NSOpenGLContext*)m_context; - [glContext makeCurrentContext]; - [glContext flushBuffer]; - } - else - { - _swapChain->makeCurrent(); - _swapChain->swapBuffers(); - } - } - - void GlContext::makeCurrent(SwapChainGL* _swapChain) - { - if (NULL == _swapChain) - { - NSOpenGLContext* glContext = (NSOpenGLContext*)m_context; - [glContext makeCurrentContext]; - } - else - { - _swapChain->makeCurrent(); - } - } - - void GlContext::import() - { - BX_TRACE("Import:"); -# define GL_EXTENSION(_optional, _proto, _func, _import) \ - { \ - if (_func == NULL) \ - { \ - _func = (_proto)bx::dlsym(s_opengl, #_import); \ - BX_TRACE("%p " #_func " (" #_import ")", _func); \ - } \ - BGFX_FATAL(_optional || NULL != _func, Fatal::UnableToInitialize, "Failed to create OpenGL context. GetProcAddress(\"%s\")", #_import); \ - } -# include "glimports.h" - } - -} /* namespace gl */ } // namespace bgfx - -void* nsglGetProcAddress(const GLubyte* _name) -{ - using namespace bgfx::gl; - if (NULL == s_opengl) - { - s_opengl = bx::dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL"); - } - return bx::dlsym(s_opengl, (const char*)_name); -} - -#endif // BX_PLATFORM_OSX && (BGFX_CONFIG_RENDERER_OPENGLES2|BGFX_CONFIG_RENDERER_OPENGLES3|BGFX_CONFIG_RENDERER_OPENGL) diff --git a/src/glimports.h b/src/glimports.h index 21f8c834b..e1d35878e 100644 --- a/src/glimports.h +++ b/src/glimports.h @@ -558,11 +558,7 @@ GL_IMPORT_EXT__(true, PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC, glMultiDrawEl GL_IMPORT_OES__(true, PFNGLGETPROGRAMBINARYPROC, glGetProgramBinary); GL_IMPORT_OES__(true, PFNGLPROGRAMBINARYPROC, glProgramBinary); -#if BX_PLATFORM_IOS -GL_IMPORT_EXT__(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor); -GL_IMPORT_EXT__(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); -GL_IMPORT_EXT__(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced); -#elif BX_PLATFORM_EMSCRIPTEN +#if BX_PLATFORM_EMSCRIPTEN GL_IMPORT_ANGLE(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor); GL_IMPORT_ANGLE(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); GL_IMPORT_ANGLE(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced); @@ -570,7 +566,7 @@ GL_IMPORT_ANGLE(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElement GL_IMPORT_OES__(true, PFNGLVERTEXATTRIBDIVISORPROC, glVertexAttribDivisor); GL_IMPORT_OES__(true, PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); GL_IMPORT_OES__(true, PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced); -#endif // BX_PLATFORM_IOS +#endif // BX_PLATFORM_EMSCRIPTEN GL_IMPORT_OES__(true, PFNGLBINDVERTEXARRAYPROC, glBindVertexArray); GL_IMPORT_OES__(true, PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays); diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index c8ad44c33..5b0e7e5b9 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -921,7 +921,7 @@ namespace bgfx { namespace gl { "OES_texture_half_float_linear", false, true }, { "OES_texture_stencil8", false, true }, { "OES_texture_storage_multisample_2d_array", false, true }, - { "OES_vertex_array_object", false, !BX_PLATFORM_IOS }, + { "OES_vertex_array_object", false, true }, { "OES_vertex_half_float", false, true }, { "OES_vertex_type_10_10_10_2", false, true }, @@ -2693,10 +2693,7 @@ namespace bgfx { namespace gl } } - for (uint32_t ii = BX_ENABLED(BX_PLATFORM_IOS) ? TextureFormat::Unknown : 0 // skip test on iOS! - ; ii < TextureFormat::Count - ; ++ii - ) + for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii) { if (TextureFormat::Unknown != ii && TextureFormat::UnknownDepth != ii) @@ -3692,12 +3689,9 @@ namespace bgfx { namespace gl GL_CHECK(glActiveTexture(GL_TEXTURE0) ); GL_CHECK(glBindTexture(GL_TEXTURE_2D, m_textures[_blitter.m_texture.idx].m_id) ); - if (!BX_ENABLED(BX_PLATFORM_OSX) ) + if (m_samplerObjectSupport) { - if (m_samplerObjectSupport) - { - GL_CHECK(glBindSampler(0, 0) ); - } + GL_CHECK(glBindSampler(0, 0) ); } } @@ -4141,11 +4135,6 @@ namespace bgfx { namespace gl if (!m_glctx.isValid() ) { m_glctx.create(_width, _height, _flags); - -#if BX_PLATFORM_IOS - // iOS: need to figure out how to deal with FBO created by context. - m_backBufferFbo = m_msaaBackBufferFbo = m_glctx.getFbo(); -#endif // BX_PLATFORM_IOS } else { @@ -6531,16 +6520,16 @@ namespace bgfx { namespace gl const bool usesPacking = !bx::findIdentifierMatch(code, s_ARB_shading_language_packing).isEmpty(); const bool usesInterpQ = !bx::findIdentifierMatch(code, s_intepolationQualifier).isEmpty(); - uint32_t version = BX_ENABLED(BX_PLATFORM_OSX) ? 120 - : usesTextureArray + uint32_t version = false + || usesTextureArray || usesTexture3D || usesIUsamplers || usesVertexID || usesUint || usesTexelFetch || usesGpuShader5 - || usesInterpQ ? 130 - : usesTextureLod ? 120 + || usesInterpQ + ? 130 : 120 ; @@ -6595,30 +6584,14 @@ namespace bgfx { namespace gl if (usesTextureArray) { bx::write(&writer, "#extension GL_EXT_texture_array : enable\n", &err); - - if (BX_ENABLED(BX_PLATFORM_OSX) ) - { - bx::write(&writer, "#define texture2DArrayLod texture2DArray\n", &err); - } - else - { - bx::write(&writer, "#define texture2DArrayLodEXT texture2DArrayLod\n", &err); - bx::write(&writer, "#define textureArray texture\n", &err); - } + bx::write(&writer, "#define texture2DArrayLodEXT texture2DArrayLod\n", &err); + bx::write(&writer, "#define textureArray texture\n", &err); } if (usesTexture3D) { bx::write(&writer, "#define texture3DEXT texture3D\n", &err); - - if (BX_ENABLED(BX_PLATFORM_OSX) ) - { - bx::write(&writer, "#define texture3DLodEXT texture3D\n", &err); - } - else - { - bx::write(&writer, "#define texture3DLodEXT texture3DLod\n", &err); - } + bx::write(&writer, "#define texture3DLodEXT texture3DLod\n", &err); } if (130 <= version) @@ -7489,8 +7462,7 @@ namespace bgfx { namespace gl uint32_t frameQueryIdx = UINT32_MAX; - if (m_timerQuerySupport - && !BX_ENABLED(BX_PLATFORM_OSX) ) + if (m_timerQuerySupport) { frameQueryIdx = m_gpuTimer.begin(BGFX_CONFIG_MAX_VIEWS, _render->m_frameNum); } @@ -7569,7 +7541,7 @@ namespace bgfx { namespace gl _render , m_gpuTimer , s_viewName - , m_timerQuerySupport && !BX_ENABLED(BX_PLATFORM_OSX) + , m_timerQuerySupport ); if (m_occlusionQuerySupport) diff --git a/src/renderer_gl.h b/src/renderer_gl.h index 245698d02..a0a33ed43 100644 --- a/src/renderer_gl.h +++ b/src/renderer_gl.h @@ -31,7 +31,6 @@ #define BGFX_USE_GL_DYNAMIC_LIB (0 \ || BX_PLATFORM_BSD \ || BX_PLATFORM_LINUX \ - || BX_PLATFORM_OSX \ || BX_PLATFORM_WINDOWS \ ) @@ -68,25 +67,12 @@ #if BGFX_CONFIG_RENDERER_OPENGL # if BGFX_CONFIG_RENDERER_OPENGL >= 31 # include -# if BX_PLATFORM_OSX -# define GL_ARB_shader_objects // OSX collsion with GLhandleARB in gltypes.h -# endif // BX_PLATFORM_OSX # else # if BX_PLATFORM_LINUX || BX_PLATFORM_BSD # define GL_PROTOTYPES # define GL_GLEXT_LEGACY # include # undef GL_PROTOTYPES -# elif BX_PLATFORM_OSX -# define GL_GLEXT_LEGACY -# define long ptrdiff_t -# include -# undef long -# undef GL_VERSION_1_2 -# undef GL_VERSION_1_3 -# undef GL_VERSION_1_4 -# undef GL_VERSION_1_5 -# undef GL_VERSION_2_0 # elif BX_PLATFORM_WINDOWS # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN @@ -103,20 +89,9 @@ #elif BGFX_CONFIG_RENDERER_OPENGLES typedef double GLdouble; # if BGFX_CONFIG_RENDERER_OPENGLES < 30 -# if BX_PLATFORM_IOS -# include -# include -//#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 -#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 -#define GL_TEXTURE_3D_OES 0x806F -#define GL_SAMPLER_3D_OES 0x8B5F -#define GL_TEXTURE_WRAP_R_OES 0x8072 -#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 -# else -# include -# include -# include -# endif // BX_PLATFORM_ +# include +# include +# include typedef int64_t GLint64; typedef uint64_t GLuint64; # define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES @@ -1168,11 +1143,7 @@ typedef uint64_t GLuint64; # include "glcontext_glx.h" #elif BGFX_USE_WGL # include "glcontext_wgl.h" -#elif BX_PLATFORM_OSX -# include "glcontext_nsgl.h" -#elif BX_PLATFORM_IOS -# include "glcontext_eagl.h" -#endif // BX_PLATFORM_ +#endif // BGFX_USE_* #ifndef GL_APIENTRY # define GL_APIENTRY APIENTRY