Play-/Source/ui_ios/GSH_OpenGLiOS.cpp
2018-04-30 21:01:23 +01:00

84 lines
2.1 KiB
C++

#include <cassert>
#include "opengl/OpenGlDef.h"
#include "GSH_OpenGLiOS.h"
#include "../Log.h"
CGSH_OpenGLiOS::CGSH_OpenGLiOS(CAEAGLLayer* layer)
: m_layer(layer)
{
}
CGSH_OpenGLiOS::~CGSH_OpenGLiOS()
{
}
CGSHandler::FactoryFunction CGSH_OpenGLiOS::GetFactoryFunction(CAEAGLLayer* layer)
{
return [layer]() { return new CGSH_OpenGLiOS(layer); };
}
void CGSH_OpenGLiOS::InitializeImpl()
{
m_context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3];
if(!m_context)
{
NSLog(@"Failed to create ES context");
return;
}
if(![EAGLContext setCurrentContext:m_context])
{
NSLog(@"Failed to set ES context current");
return;
}
CreateFramebuffer();
{
PRESENTATION_PARAMS presentationParams;
presentationParams.mode = PRESENTATION_MODE_FIT;
presentationParams.windowWidth = m_framebufferWidth;
presentationParams.windowHeight = m_framebufferHeight;
SetPresentationParams(presentationParams);
}
CGSH_OpenGL::InitializeImpl();
}
void CGSH_OpenGLiOS::PresentBackbuffer()
{
glBindRenderbuffer(GL_RENDERBUFFER, m_colorRenderbuffer);
CHECKGLERROR();
BOOL success = [m_context presentRenderbuffer:GL_RENDERBUFFER];
assert(success == YES);
}
void CGSH_OpenGLiOS::CreateFramebuffer()
{
assert(m_defaultFramebuffer == 0);
glGenFramebuffers(1, &m_defaultFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, m_defaultFramebuffer);
// Create color render buffer and allocate backing store.
glGenRenderbuffers(1, &m_colorRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_colorRenderbuffer);
[m_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:m_layer];
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &m_framebufferWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &m_framebufferHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorRenderbuffer);
CHECKGLERROR();
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE)
{
NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
assert(false);
}
m_presentFramebuffer = m_defaultFramebuffer;
}