bgfx/src/glcontext_eagl.mm

129 lines
3.8 KiB
Text
Raw Normal View History

2013-07-21 17:44:53 -04:00
/*
2015-01-02 17:43:11 -05:00
* Copyright 2011-2015 Branimir Karadzic. All rights reserved.
2013-07-21 17:44:53 -04:00
* License: http://www.opensource.org/licenses/BSD-2-Clause
*/
#include "bgfx_p.h"
2014-03-31 00:54:53 -04:00
#if BX_PLATFORM_IOS && (BGFX_CONFIG_RENDERER_OPENGLES|BGFX_CONFIG_RENDERER_OPENGL)
2013-07-21 17:44:53 -04:00
# include <UIKit/UIKit.h>
# include <QuartzCore/CAEAGLLayer.h>
# include "renderer_gl.h"
namespace bgfx { namespace gl
2013-07-21 17:44:53 -04:00
{
2014-02-19 23:08:22 -05:00
# define GL_IMPORT(_optional, _proto, _func, _import) _proto _func = NULL
# include "glimports.h"
2013-07-21 17:44:53 -04:00
void GlContext::create(uint32_t _width, uint32_t _height)
{
2013-12-07 13:19:54 -05:00
BX_UNUSED(_width, _height);
2013-07-21 17:44:53 -04:00
CAEAGLLayer* layer = (CAEAGLLayer*)g_bgfxEaglLayer;
2013-07-21 18:38:44 -04:00
layer.opaque = true;
layer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys
: [NSNumber numberWithBool:false]
, kEAGLDrawablePropertyRetainedBacking
, kEAGLColorFormatRGBA8
, kEAGLDrawablePropertyColorFormat
, nil
];
EAGLContext* context = [ [EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
BX_CHECK(NULL != context, "Failed to create kEAGLRenderingAPIOpenGLES2 context.");
m_context = (void*)context;
2013-07-21 17:44:53 -04:00
[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);
GL_CHECK(glGenRenderbuffers(1, &m_depthStencilRbo) );
GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_depthStencilRbo) );
GL_CHECK(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, width, height) ); // from OES_packed_depth_stencil
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) );
GL_CHECK(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_depthStencilRbo) );
2015-04-07 00:31:26 -04:00
2013-07-21 17:44:53 -04:00
BX_CHECK(GL_FRAMEBUFFER_COMPLETE == glCheckFramebufferStatus(GL_FRAMEBUFFER)
, "glCheckFramebufferStatus failed 0x%08x"
, glCheckFramebufferStatus(GL_FRAMEBUFFER)
);
}
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)
2013-07-21 17:44:53 -04:00
{
GL_CHECK(glDeleteRenderbuffers(1, &m_depthStencilRbo) );
m_depthStencilRbo = 0;
2013-07-21 17:44:53 -04:00
}
2013-07-22 00:53:20 -04:00
EAGLContext* context = (EAGLContext*)m_context;
[context release];
2013-07-21 17:44:53 -04:00
}
2013-07-22 00:53:20 -04:00
2015-04-07 00:31:26 -04:00
void GlContext::resize(uint32_t _width, uint32_t _height, uint32_t _flags)
2013-07-21 17:44:53 -04:00
{
2015-04-07 00:31:26 -04:00
BX_UNUSED(_width, _height, _flags);
2013-07-21 17:44:53 -04:00
BX_TRACE("resize context");
}
2014-09-23 23:35:39 -04:00
bool GlContext::isSwapChainSupported()
{
return false;
}
2014-09-07 20:52:02 -04:00
SwapChainGL* GlContext::createSwapChain(void* /*_nwh*/)
2013-07-21 17:44:53 -04:00
{
2014-09-07 20:52:02 -04:00
BX_CHECK(false, "Shouldn't be called!");
return NULL;
}
2014-11-30 12:06:47 -05:00
void GlContext::destroySwapChain(SwapChainGL* /*_swapChain*/)
2014-09-07 20:52:02 -04:00
{
BX_CHECK(false, "Shouldn't be called!");
}
void GlContext::swap(SwapChainGL* _swapChain)
{
BX_CHECK(NULL == _swapChain, "Shouldn't be called!"); BX_UNUSED(_swapChain);
2013-07-21 17:44:53 -04:00
GL_CHECK(glBindRenderbuffer(GL_RENDERBUFFER, m_colorRbo) );
2013-07-22 00:53:20 -04:00
EAGLContext* context = (EAGLContext*)m_context;
2013-07-21 17:44:53 -04:00
[context presentRenderbuffer:GL_RENDERBUFFER];
}
2014-09-07 20:52:02 -04:00
void GlContext::makeCurrent(SwapChainGL* /*_swapChain*/)
{
}
2013-07-21 17:44:53 -04:00
void GlContext::import()
{
}
} /* namespace gl */ } // namespace bgfx
2013-07-21 17:44:53 -04:00
#endif // BX_PLATFORM_IOS && (BGFX_CONFIG_RENDERER_OPENGLES2|BGFX_CONFIG_RENDERER_OPENGLES3|BGFX_CONFIG_RENDERER_OPENGL)