I’m trying to make some post-process work with a GPU kernel. For this, I render some graphics into a framebuffer and then a Color Attachment is copied to a PBO in order to use inside a kernel. Something like
glGenRenderbuffers( 1, &this->depthBuffer );
glBindRenderbuffer( GL_RENDERBUFFER, this->depthBuffer );
glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH_COMPONENT, scene->getCamera().getWidth(), scene->getCamera().getHeight() );
glBindRenderbuffer( GL_RENDERBUFFER, 0 );
glGenRenderbuffers( 1, &this->colorBuffer );
glBindRenderbuffer( GL_RENDERBUFFER, this->colorBuffer );
glRenderbufferStorage( GL_RENDERBUFFER, GL_RGBA32F, scene->getCamera().getWidth(), scene->getCamera().getHeight() );
glBindRenderbuffer( GL_RENDERBUFFER, 0 );
this->fbo->attachRenderBuffer( this->colorBuffer, GL_COLOR_ATTACHMENT0 );
this->fbo->attachRenderBuffer( this->depthBuffer, GL_DEPTH_ATTACHMENT );
My question is if it is possible to map the buffer attached to GL_COLOR_ATTACHMENT0 like this
cudaGraphicsGLRegisterBuffer( &this->cudaGraphicRes, this->colorBuffer, cudaGraphicsMapFlagsWriteDiscard );
or even the color buffer need to be registered using cudaGraphicsGLRegisterImage?
I wanna do this to avoid texture-to-buffer copies and vice-versa.