From Thomas Hogarth, "Apple have decided in their eternal wisdom to do away with separate depth and stencil buffers on iOS from version 5 and above.
Attached are changes to GraphicsWindowIOS.mm to support setting up the new buffer type when compiling for iOS5, also attached is a small change to FrameBufferObject.cpp to report support for packed depth stencil via the GL_OES_packed_depth_stencil extension. For anyone reading this you can attach a packed depth stencil to your FBO like so _rttCamera->attach( osg::Camera::PACKED_DEPTH_STENCIL_BUFFER, GL_DEPTH24_STENCIL8_EXT ); Luckily GL_DEPTH24_STENCIL8_EXT happens to have the same value as iOSs GL_DEPTH24_STENCIL8_OES"
This commit is contained in:
@@ -113,7 +113,8 @@ FBOExtensions::FBOExtensions(unsigned int contextID)
|
||||
LOAD_FBO_EXT(glRenderbufferStorageMultisampleCoverageNV);
|
||||
|
||||
_packed_depth_stencil_supported = OSG_GL3_FEATURES ||
|
||||
(isGLExtensionSupported(contextID, "GL_EXT_packed_depth_stencil"));
|
||||
(isGLExtensionSupported(contextID, "GL_EXT_packed_depth_stencil")) ||
|
||||
(isGLExtensionSupported(contextID, "GL_OES_packed_depth_stencil"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -326,6 +326,37 @@ typedef std::map<void*, unsigned int> TouchPointsIdMapping;
|
||||
|
||||
osg::notify(osg::DEBUG_INFO) << "GraphicsWindowIOS::createFramebuffer INFO: Created GL RenderBuffer of size " << _backingWidth << ", " << _backingHeight << " ." << std::endl;
|
||||
|
||||
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 50000
|
||||
//on ios 5 we have to use a packed depth stencil buffer if we want stencil
|
||||
if(_win->getTraits()->depth > 0) {
|
||||
//add stencil if requested
|
||||
if(_win->getTraits()->stencil > 0) {
|
||||
// Create a packed depth stencil buffer.
|
||||
glGenRenderbuffersOES(1, &_depthRenderbuffer);
|
||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _depthRenderbuffer);
|
||||
|
||||
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH24_STENCIL8_OES, _backingWidth, _backingHeight);
|
||||
|
||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES,
|
||||
GL_RENDERBUFFER_OES, _depthRenderbuffer);
|
||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_STENCIL_ATTACHMENT_OES,
|
||||
GL_RENDERBUFFER_OES, _depthRenderbuffer);
|
||||
}else{
|
||||
//normal depth buffer
|
||||
glGenRenderbuffersOES(1, &_depthRenderbuffer);
|
||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _depthRenderbuffer);
|
||||
if(_win->getTraits()->depth == 16)
|
||||
{
|
||||
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, _backingWidth, _backingHeight);
|
||||
}else if(_win->getTraits()->depth == 24){
|
||||
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24_OES, _backingWidth, _backingHeight);
|
||||
}
|
||||
|
||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, _depthRenderbuffer);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
//add depth if requested
|
||||
if(_win->getTraits()->depth > 0) {
|
||||
glGenRenderbuffersOES(1, &_depthRenderbuffer);
|
||||
@@ -336,11 +367,7 @@ typedef std::map<void*, unsigned int> TouchPointsIdMapping;
|
||||
}else if(_win->getTraits()->depth == 24){
|
||||
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT24_OES, _backingWidth, _backingHeight);
|
||||
}
|
||||
#if defined(GL_DEPTH_COMPONENT32_OES)
|
||||
else if(_win->getTraits()->depth == 32){
|
||||
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT32_OES, _backingWidth, _backingHeight);
|
||||
}
|
||||
#endif
|
||||
|
||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, _depthRenderbuffer);
|
||||
}
|
||||
|
||||
@@ -350,7 +377,8 @@ typedef std::map<void*, unsigned int> TouchPointsIdMapping;
|
||||
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _stencilBuffer);
|
||||
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_STENCIL_INDEX8_OES, _backingWidth, _backingHeight);
|
||||
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_STENCIL_ATTACHMENT_OES, GL_RENDERBUFFER_OES, _stencilBuffer);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//MSAA only available for >= 4.0 sdk
|
||||
|
||||
|
||||
Reference in New Issue
Block a user