Hi,
I've recently been fiddling/debugging with a similar setup, nl RTT to
osgCuda. From what I've seen in the code (r314) the copy step is missing
for osgCompute::MAP_DEVICE_SOURCE. Allocation of a copy happens, but if
the texture does not have an osg::Image, no sync is taking place.
Sending my test app to the osgCuda devs is on my todo list that does not
seem to want to get shorter. I was also not sure if I have to attach
some kind of callback.
cheers
jp
On 01/02/11 11:16, Serkan Ergun wrote:
Hi,
First of all thanks for the great work you've benn doing so far. I'm trying to
build up a post processing setup using osgCompute but I have some problems.
This is how my scene graph looks like:
Computation (Render before children)
|-> Camera (Relative, attached MRT textures and using FBO)
|........|--> Scene
|-> Camera (Absolute, Orthogonal 2D Camera)
.........|--> Quad Geometry using Target Texture
I'm generating the MRTs and Target textures as follows:
Code:
char MrtName[80];
for(int i = 0; i< 4; i++)
{
MRTTexture[i] = new osgCuda::Texture2D;
MRTTexture[i]->setTextureSize(textureWidth, textureHeight);
MRTTexture[i]->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR);
MRTTexture[i]->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR);
MRTTexture[i]->setInternalFormat(GL_RGBA32F_ARB);
MRTTexture[i]->setSourceFormat(GL_RGBA);
MRTTexture[i]->setSourceType(GL_FLOAT);
sprintf(MrtName, "MRT%d", i);
MRTTexture[i]->addIdentifier(MrtName);
}
//Target
*Target = new osgCuda::Texture2D;
(*Target)->setInternalFormat( GL_RGBA32F_ARB );
(*Target)->setSourceFormat( GL_RGBA );
(*Target)->setSourceType( GL_FLOAT );
(*Target)->setTextureWidth( textureWidth );
(*Target)->setTextureHeight( textureHeight );
(*Target)->setFilter(osg::Texture2D::MIN_FILTER,
osg::Texture2D::NEAREST);
(*Target)->setFilter(osg::Texture2D::MAG_FILTER,
osg::Texture2D::NEAREST);
(*Target)->addIdentifier( "TARGET" );
And this is how I call my kernel:
Code:
virtual void launch()
{
if( isClear() )
return;
swap( _blocks,
_threads,
Target->map(osgCompute::MAP_DEVICE_TARGET),
MRT0->map(osgCompute::MAP_DEVICE_SOURCE),
Target->getPitch(),
MRT0->getPitch(),
Target->getDimension(0),
Target->getDimension(1) );
}
And this is the kernel:
Code:
__global__
void swapKernel( float4* dst, float4* src, unsigned int dstPitch, unsigned int
srcPitch, unsigned int imageWidth, unsigned int imageHeight )
{
// compute thread dimension
unsigned int x = blockIdx.x * blockDim.x + threadIdx.x;
unsigned int y = blockIdx.y * blockDim.y + threadIdx.y;
if( x< imageWidth&& y< imageHeight )
{
float4* dstPixel = (float4*)(((char*) dst) + dstPitch * y ) + x;
float4* srcPixel = (float4*)(((char*) src) + srcPitch * y ) + x;
// swap channels
*dstPixel = *srcPixel;
//*dstPixel = make_float4( ((float) x / (float) imageWidth)
,((float) y / (float) imageHeight), 0, 1 );
}
}
I'm sure MRT's are setup correctly since when I attach any of the MRT's to the
Quad I can see the scene.
I'm also sure that kernel is working properly since when I write texture
coordinates to the target I can see them.
However when I try to copy the MRT to the Target I see a black screen.
I couldn't find whats wrong with this setup. Any help would be appreciated.
Thanks in advance!
Cheers,
Serkan[/code]
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=36216#36216
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
--
This message is subject to the CSIR's copyright terms and conditions, e-mail legal notice, and implemented Open Document Format (ODF) standard.
The full disclaimer details can be found at http://www.csir.co.za/disclaimer.html.
This message has been scanned for viruses and dangerous content by MailScanner,
and is believed to be clean. MailScanner thanks Transtec Computers for their support.
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org