diff options
| -rw-r--r-- | tests/OffscreenContext.mm | 1 | ||||
| -rw-r--r-- | tests/fbo.cc | 50 | ||||
| -rw-r--r-- | tests/regression/opencsgtest/render-tests-expected.png | bin | 10392 -> 9622 bytes | 
3 files changed, 37 insertions, 14 deletions
| diff --git a/tests/OffscreenContext.mm b/tests/OffscreenContext.mm index 2bbaffa..140516f 100644 --- a/tests/OffscreenContext.mm +++ b/tests/OffscreenContext.mm @@ -33,6 +33,7 @@ OffscreenContext *create_offscreen_context(int w, int h)      NSOpenGLPFANoRecovery,      NSOpenGLPFAAccelerated,      NSOpenGLPFADepthSize, 24, +    NSOpenGLPFAStencilSize, 8,      (NSOpenGLPixelFormatAttribute) 0    };    NSOpenGLPixelFormat *pixFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attributes] autorelease]; diff --git a/tests/fbo.cc b/tests/fbo.cc index 2978e59..2a3342d 100644 --- a/tests/fbo.cc +++ b/tests/fbo.cc @@ -89,14 +89,30 @@ bool fbo_ext_init(fbo_t *fbo, size_t width, size_t height)      return false;    } -  glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,  -                               GL_RENDERBUFFER_EXT, fbo->depthbuf_id); -  if (report_glerror("specifying depth render buffer EXT")) return false; - -  if (!check_fbo_status()) { -    cerr << "Problem with OpenGL EXT framebuffer after specifying depth render buffer.\n"; -    return false; -  } +	if (glewIsSupported("GL_EXT_packed_depth_stencil")) { +		glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, +																 GL_RENDERBUFFER_EXT, fbo->depthbuf_id); +		if (report_glerror("specifying depth render buffer EXT")) return false; +		glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, +																 GL_RENDERBUFFER_EXT, fbo->depthbuf_id); +		if (report_glerror("specifying stencil render buffer EXT")) return false; +		 +		if (!check_fbo_status()) { +			cerr << "Problem with OpenGL EXT framebuffer after specifying depth render buffer.\n"; +			return false; +		} +	} +	else { +		cerr << "Warning: Cannot create stencil buffer (GL_EXT_packed_depth_stencil not supported)\n"; +		glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,  +																 GL_RENDERBUFFER_EXT, fbo->depthbuf_id); +		if (report_glerror("specifying depth render buffer EXT")) return false; +		 +		if (!check_fbo_status()) { +			cerr << "Problem with OpenGL EXT framebuffer after specifying depth stencil render buffer.\n"; +			return false; +		} +	}    return true;  } @@ -126,9 +142,9 @@ bool fbo_arb_init(fbo_t *fbo, size_t width, size_t height)      return false;    } -  glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,  +  glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,                                  GL_RENDERBUFFER, fbo->depthbuf_id); -  if (report_glerror("specifying depth render buffer")) return false; +  if (report_glerror("specifying depth stencil render buffer")) return false;    if (!check_fbo_status()) {      cerr << "Problem with OpenGL framebuffer after specifying depth render buffer.\n"; @@ -165,16 +181,22 @@ bool fbo_resize(fbo_t *fbo, size_t width, size_t height)  {    if (use_ext()) {      glBindRenderbufferEXT(GL_RENDERBUFFER, fbo->depthbuf_id); -    glRenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); -    if (report_glerror("creating depth render buffer")) return false; +		if (glewIsSupported("GL_EXT_packed_depth_stencil")) { +			glRenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height); +			if (report_glerror("creating depth stencil render buffer")) return false; +		} +		else { +			glRenderbufferStorageEXT(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); +			if (report_glerror("creating depth render buffer")) return false; +		}      glBindRenderbufferEXT(GL_RENDERBUFFER, fbo->renderbuf_id);      glRenderbufferStorageEXT(GL_RENDERBUFFER, GL_RGBA8, width, height);      if (report_glerror("creating color render buffer")) return false;    } else {      glBindRenderbuffer(GL_RENDERBUFFER, fbo->depthbuf_id); -    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); -    if (report_glerror("creating depth render buffer")) return false; +    glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height); +    if (report_glerror("creating depth stencil render buffer")) return false;      glBindRenderbuffer(GL_RENDERBUFFER, fbo->renderbuf_id);      glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, width, height); diff --git a/tests/regression/opencsgtest/render-tests-expected.png b/tests/regression/opencsgtest/render-tests-expected.pngBinary files differ index 40a1703..487cbe8 100644 --- a/tests/regression/opencsgtest/render-tests-expected.png +++ b/tests/regression/opencsgtest/render-tests-expected.png | 
