Thanks vade I have got it working with the blend function in Multithreaded mode but a little confused about a couple of things
1. I am using same OpenGLContext object in all my QCRenderer objects and the Main Renderer but doing CGLLockContext to make sure that drawing is synced. Is it ok to use same object or should I create new shared context using CGLCreateContext API? 2. I am creating a new FBO in every render pass of my QCRenderer's object. Can I keep the same FBO object and attach a new texture in every rendering pass? Thank you for taking the time to answering the questions. Nisar On Mon, Apr 16, 2012 at 8:38 PM, vade <[email protected]> wrote: > Why do this yourself, when QC has core image blend modes to do all of this > for you? Make a CVOpenGLTextureRef or more ideally, publish an image output > from your source comps and then use a 3rd comp to do arbitrary mixing. > Caveat: all the QCRenderers should be on the same thread if you use an > image output / QCImage due to API contractual obligations. > > Otherwise, with a texture attachment from various FBO's, assuming the > CGLContext objects are shared, you should be able to call a GL Flush on > both threads (to ensure the FBO's are in sync, and then pass the GLuint > texture ID to a thread that does the compositing. Syncing may be > problematic, and honestly, im not 100% up to speed on the nuances. For > sanity, get it working in a single thread 1st. > > Additionally "Blend" means a lot of different things. Do you want a simple > source over? Do you want Porter / Duff blend modes? Do you want a mixer > amount to animate between a and b channels? > > You can just draw two quads, one on top of the other, and use basic OpenGL > blend mode blending to do alpha blending. > > glEnable(GL_BLEND) > glColor4f(1.0, 1.0, 1.0, 1.0); > glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); > > // bind texture channel a > // draw quad one > > glColor4f(1.0, 1.0, 1.0, mix_amount); > > //bind texture channel b > // draw quad 2 > > You can get more fancy and use GLSL shaders and bind both textures at once > via multitexturing, and render to a quad however you want. > > On Apr 15, 2012, at 5:17 AM, Nisar Ahmed wrote: > > Dear list, > > How do I blend 2 textures rendered by 2 different compositions, these > compositions are rendered in separate FBOs in separate threads. > > I have initialized FBO in the following code > > #import <OpenGL/CGLMacro.h> > int createFBO(GLuint* fbo, GLuint* color, GLuint* depth, uint32_t width, > uint32_t height, CGLContextObj cgl_ctx) > { > // texture / color attachment > glGenTextures(1, color); > glEnable(GL_TEXTURE_2D); > glBindTexture(GL_TEXTURE_2D, *color); > > > glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); > glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); > glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); > glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, > GL_UNSIGNED_BYTE, NULL); > glBindTexture(GL_TEXTURE_2D, 0); > > > /* > // depth buffer > glGenRenderbuffersEXT(1, depth); > glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, *depth); > glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, > width, height); > glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); > */ > // FBO and connect attachments > glGenFramebuffersEXT(1, fbo); > glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, *fbo); > glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0, > GL_TEXTURE_2D, *color, 0); > //glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, > GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER_EXT, *depth); > // Draw black so we have output if the renderer isn't loaded > glClearColor(0.0, 0.0, 0.0, 0.0); > glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); > > > glViewport(0, 0, width, height); > > > glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); > > > GLenum status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT); > if(status != GL_FRAMEBUFFER_COMPLETE) > { > //NSLog(@"Simple Client: OpenGL error %04X", status); > glDeleteTextures(1, color); > glDeleteFramebuffersEXT(1, fbo); > glDeleteRenderbuffersEXT(1, depth); > *color = 0; > *fbo = 0; > *depth = 0; > return 0; > } > return 1; > } > The compositions are rendered in this FBO and the textures returned are > rendered in a separate rendering loop > In my rendering loop I am enabling > > glEnable(GL_DEPTH_TEST); > glEnable(GL_BLEND); > glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); > > before binding and rendering each texture into a quad. > > Tanks > NIsar > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Quartzcomposer-dev mailing list ([email protected]) > Help/Unsubscribe/Update your Subscription: > > https://lists.apple.com/mailman/options/quartzcomposer-dev/doktorp%40mac.com > > This email sent to [email protected] > > > > _______________________________________________ > Do not post admin requests to the list. They will be ignored. > Quartzcomposer-dev mailing list ([email protected]) > Help/Unsubscribe/Update your Subscription: > > https://lists.apple.com/mailman/options/quartzcomposer-dev/nisar.med%40gmail.com > > This email sent to [email protected] > >
_______________________________________________ Do not post admin requests to the list. They will be ignored. Quartzcomposer-dev mailing list ([email protected]) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/quartzcomposer-dev/archive%40mail-archive.com This email sent to [email protected]

