Add missing parameters in CEAGLManager::activateContext.

Thanks to Maksym Hamarnyk for the patch.


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6118 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien 2020-06-13 14:49:38 +00:00
parent 562c0fb6f1
commit 87c0b1fb93
2 changed files with 38 additions and 38 deletions

@ -54,7 +54,7 @@ namespace video
const SExposedVideoData& getContext() const; const SExposedVideoData& getContext() const;
bool activateContext(const SExposedVideoData& videoData); bool activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero);
// Swap buffers. // Swap buffers.
bool swapBuffers(); bool swapBuffers();
@ -62,22 +62,22 @@ namespace video
private: private:
SIrrlichtCreationParameters Params; SIrrlichtCreationParameters Params;
SExposedVideoData Data; SExposedVideoData Data;
bool Configured; bool Configured;
void* DataStorage; void* DataStorage;
struct SFrameBuffer struct SFrameBuffer
{ {
SFrameBuffer() : BufferID(0), ColorBuffer(0), DepthBuffer(0) SFrameBuffer() : BufferID(0), ColorBuffer(0), DepthBuffer(0)
{ {
} }
u32 BufferID; u32 BufferID;
u32 ColorBuffer; u32 ColorBuffer;
u32 DepthBuffer; u32 DepthBuffer;
}; };
SFrameBuffer FrameBuffer; SFrameBuffer FrameBuffer;
}; };
} }

@ -24,7 +24,7 @@ namespace irr
{ {
namespace video namespace video
{ {
struct SEAGLManagerDataStorage struct SEAGLManagerDataStorage
{ {
SEAGLManagerDataStorage() : Layer(0), Context(0) SEAGLManagerDataStorage() : Layer(0), Context(0)
@ -40,7 +40,7 @@ CEAGLManager::CEAGLManager() : IContextManager(), Configured(false), DataStorage
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("CEAGLManager"); setDebugName("CEAGLManager");
#endif #endif
DataStorage = new SEAGLManagerDataStorage(); DataStorage = new SEAGLManagerDataStorage();
} }
@ -49,7 +49,7 @@ CEAGLManager::~CEAGLManager()
destroyContext(); destroyContext();
destroySurface(); destroySurface();
terminate(); terminate();
delete static_cast<SEAGLManagerDataStorage*>(DataStorage); delete static_cast<SEAGLManagerDataStorage*>(DataStorage);
} }
@ -62,7 +62,7 @@ bool CEAGLManager::initialize(const SIrrlichtCreationParameters& params, const S
Params = params; Params = params;
Data = data; Data = data;
UIView* view = (__bridge UIView*)data.OpenGLiOS.View; UIView* view = (__bridge UIView*)data.OpenGLiOS.View;
if (view == nil || ![[view layer] isKindOfClass:[CAEAGLLayer class]]) if (view == nil || ![[view layer] isKindOfClass:[CAEAGLLayer class]])
@ -70,7 +70,7 @@ bool CEAGLManager::initialize(const SIrrlichtCreationParameters& params, const S
os::Printer::log("Could not get EAGL display."); os::Printer::log("Could not get EAGL display.");
return false; return false;
} }
dataStorage->Layer = (CAEAGLLayer*)[view layer]; dataStorage->Layer = (CAEAGLLayer*)[view layer];
return true; return true;
@ -79,11 +79,11 @@ bool CEAGLManager::initialize(const SIrrlichtCreationParameters& params, const S
void CEAGLManager::terminate() void CEAGLManager::terminate()
{ {
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage); SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
[EAGLContext setCurrentContext:0]; [EAGLContext setCurrentContext:0];
destroySurface(); destroySurface();
if (dataStorage->Layer != nil) if (dataStorage->Layer != nil)
dataStorage->Layer = 0; dataStorage->Layer = 0;
} }
@ -92,13 +92,13 @@ bool CEAGLManager::generateSurface()
{ {
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage); SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
CAEAGLLayer* layer = dataStorage->Layer; CAEAGLLayer* layer = dataStorage->Layer;
if (layer == nil) if (layer == nil)
return false; return false;
if (Configured) if (Configured)
return true; return true;
NSDictionary* attribs = [NSDictionary dictionaryWithObjectsAndKeys: NSDictionary* attribs = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], [NSNumber numberWithBool:NO],
kEAGLDrawablePropertyRetainedBacking, kEAGLDrawablePropertyRetainedBacking,
@ -108,7 +108,7 @@ bool CEAGLManager::generateSurface()
[layer setOpaque:(Params.WithAlphaChannel) ? YES : NO]; [layer setOpaque:(Params.WithAlphaChannel) ? YES : NO];
[layer setDrawableProperties:attribs]; [layer setDrawableProperties:attribs];
Configured = true; Configured = true;
return true; return true;
@ -118,13 +118,13 @@ void CEAGLManager::destroySurface()
{ {
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage); SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
CAEAGLLayer* layer = dataStorage->Layer; CAEAGLLayer* layer = dataStorage->Layer;
if (layer == nil) if (layer == nil)
return; return;
[layer setOpaque:NO]; [layer setOpaque:NO];
[layer setDrawableProperties:nil]; [layer setDrawableProperties:nil];
Configured = false; Configured = false;
} }
@ -156,7 +156,7 @@ bool CEAGLManager::generateContext()
os::Printer::log("Could not create EAGL context.", ELL_ERROR); os::Printer::log("Could not create EAGL context.", ELL_ERROR);
return false; return false;
} }
Data.OpenGLiOS.Context = (__bridge void*)dataStorage->Context; Data.OpenGLiOS.Context = (__bridge void*)dataStorage->Context;
os::Printer::log("EAGL context created with OpenGLESVersion: ", core::stringc(static_cast<int>(OpenGLESVersion)), ELL_DEBUG); os::Printer::log("EAGL context created with OpenGLESVersion: ", core::stringc(static_cast<int>(OpenGLESVersion)), ELL_DEBUG);
@ -167,7 +167,7 @@ bool CEAGLManager::generateContext()
void CEAGLManager::destroyContext() void CEAGLManager::destroyContext()
{ {
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage); SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
[dataStorage->Context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:nil]; [dataStorage->Context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:nil];
if (FrameBuffer.BufferID != 0) if (FrameBuffer.BufferID != 0)
@ -175,13 +175,13 @@ void CEAGLManager::destroyContext()
glDeleteFramebuffersOES(1, &FrameBuffer.BufferID); glDeleteFramebuffersOES(1, &FrameBuffer.BufferID);
FrameBuffer.BufferID = 0; FrameBuffer.BufferID = 0;
} }
if (FrameBuffer.ColorBuffer != 0) if (FrameBuffer.ColorBuffer != 0)
{ {
glDeleteRenderbuffersOES(1, &FrameBuffer.ColorBuffer); glDeleteRenderbuffersOES(1, &FrameBuffer.ColorBuffer);
FrameBuffer.ColorBuffer = 0; FrameBuffer.ColorBuffer = 0;
} }
if (FrameBuffer.DepthBuffer != 0) if (FrameBuffer.DepthBuffer != 0)
{ {
glDeleteRenderbuffersOES(1, &FrameBuffer.DepthBuffer); glDeleteRenderbuffersOES(1, &FrameBuffer.DepthBuffer);
@ -189,25 +189,25 @@ void CEAGLManager::destroyContext()
} }
[EAGLContext setCurrentContext:0]; [EAGLContext setCurrentContext:0];
if (dataStorage->Context != nil) if (dataStorage->Context != nil)
dataStorage->Context = 0; dataStorage->Context = 0;
Data.OpenGLiOS.Context = 0; Data.OpenGLiOS.Context = 0;
} }
bool CEAGLManager::activateContext(const SExposedVideoData& videoData) bool CEAGLManager::activateContext(const SExposedVideoData& videoData, bool restorePrimaryOnZero)
{ {
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage); SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
EAGLContext* context = dataStorage->Context; EAGLContext* context = dataStorage->Context;
bool status = false; bool status = false;
if (context != nil) if (context != nil)
{ {
status = ([EAGLContext currentContext] == context || [EAGLContext setCurrentContext:context]); status = ([EAGLContext currentContext] == context || [EAGLContext setCurrentContext:context]);
} }
if (status) if (status)
{ {
if (FrameBuffer.ColorBuffer == 0) if (FrameBuffer.ColorBuffer == 0)
@ -216,7 +216,7 @@ bool CEAGLManager::activateContext(const SExposedVideoData& videoData)
glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:dataStorage->Layer]; [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:dataStorage->Layer];
} }
if (FrameBuffer.DepthBuffer == 0) if (FrameBuffer.DepthBuffer == 0)
{ {
GLenum depth = (Params.ZBufferBits >= 24) ? GL_DEPTH_COMPONENT24_OES : GL_DEPTH_COMPONENT16_OES; GLenum depth = (Params.ZBufferBits >= 24) ? GL_DEPTH_COMPONENT24_OES : GL_DEPTH_COMPONENT16_OES;
@ -225,7 +225,7 @@ bool CEAGLManager::activateContext(const SExposedVideoData& videoData)
glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.DepthBuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.DepthBuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, depth, Params.WindowSize.Width, Params.WindowSize.Height); glRenderbufferStorageOES(GL_RENDERBUFFER_OES, depth, Params.WindowSize.Width, Params.WindowSize.Height);
} }
if (FrameBuffer.BufferID == 0) if (FrameBuffer.BufferID == 0)
{ {
glGenFramebuffersOES(1, &FrameBuffer.BufferID); glGenFramebuffersOES(1, &FrameBuffer.BufferID);
@ -233,7 +233,7 @@ bool CEAGLManager::activateContext(const SExposedVideoData& videoData)
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, FrameBuffer.DepthBuffer); glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, FrameBuffer.DepthBuffer);
} }
glBindFramebufferOES(GL_FRAMEBUFFER_OES, FrameBuffer.BufferID); glBindFramebufferOES(GL_FRAMEBUFFER_OES, FrameBuffer.BufferID);
} }
else else
@ -253,17 +253,17 @@ bool CEAGLManager::swapBuffers()
{ {
SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage); SEAGLManagerDataStorage* dataStorage = static_cast<SEAGLManagerDataStorage*>(DataStorage);
EAGLContext* context = dataStorage->Context; EAGLContext* context = dataStorage->Context;
bool status = false; bool status = false;
if (context != nil && context == [EAGLContext currentContext]) if (context != nil && context == [EAGLContext currentContext])
{ {
glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer); glBindRenderbufferOES(GL_RENDERBUFFER_OES, FrameBuffer.ColorBuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES]; [context presentRenderbuffer:GL_RENDERBUFFER_OES];
status = true; status = true;
} }
return status; return status;
} }