Hi list,
i have some issues in my app when rendering QCRenderer to MSAA Enabled FBO in a
CVDisplaylink driven rendering loop. With 10.6.3 everything just worked fine,
but with 10.6.4, this code makes my screen(!) glitching and lock my computer
(MBP with nVidia9400), so i have to power off/on switch. I got no GL errors,
just an exception message in kernel.log. With ATI based cards it seems to
worked fine. I'm not a GL guru, well maybe i missed something, here is the code.
Any help will be much appreciated!
- (id) renderSynthAPlayerFBO:(CGLContextObj)context atTime:(NSTimeInterval)time
withArguments:(NSDictionary *)args
{
CGLContextObj cgl_ctx = context;
CGLLockContext(cgl_ctx);
int width = [resoWide intValue];
int height = [resoHigh intValue];
glPushAttrib(GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT | GL_VIEWPORT);
{
if (playeraFBOneedsreset)
{
if (msaaRenderBufferSA != 0) {
//Delete resources
glDeleteRenderbuffersEXT(1,
&msaaRenderBufferSA);
glDeleteRenderbuffersEXT(1, &depthBufferSA);
glDeleteFramebuffersEXT(1, &msaaFrameBufferSA);
glDeleteFramebuffersEXT(1, &synthaplayerfbo);
}
if (synthaplayerimg==0) glGenTextures(1,
&synthaplayerimg);
glGenFramebuffersEXT(1, &msaaFrameBufferSA);
glGenFramebuffersEXT(1, &synthaplayerfbo);
glGenRenderbuffersEXT(1, &depthBufferSA);
glGenRenderbuffersEXT(1, &msaaRenderBufferSA);
playeraFBOneedsreset = NO;
}
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, msaaRenderBufferSA);
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, 4,
GL_RGBA8, width, height);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthBufferSA);
glRenderbufferStorageMultisampleEXT(GL_RENDERBUFFER_EXT, 4,
GL_DEPTH_COMPONENT24, width, height);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, msaaFrameBufferSA);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, msaaRenderBufferSA);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT,
GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthBufferSA);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glViewport(0, 0, width, height);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glBindTexture(GL_TEXTURE_RECTANGLE_EXT, synthaplayerimg);
glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA8, width,
height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, synthaplayerfbo);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_RECTANGLE_EXT, synthaplayerimg, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, msaaFrameBufferSA);
// qcrenderer render
[synthAPlayerRenderer renderAtTime:time arguments:args];
[synthAPlayerContext flushBuffer];
// restore states
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glPopAttrib();
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT,
msaaFrameBufferSA);
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, synthaplayerfbo);
glBlitFramebufferEXT(0, 0, width, height, 0, 0, width, height,
GL_COLOR_BUFFER_BIT, GL_NEAREST);
// unbind FBO
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT,0);
}
CGLUnlockContext(cgl_ctx);
return [CIImage imageWithTexture:synthaplayerimg size:CGSizeMake(width,
height) flipped:NO colorSpace:CGDisplayCopyColorSpace(kCGDirectMainDisplay)];
}
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Quartzcomposer-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com
This email sent to [email protected]