Hi,

for my current project I need to do some computations in the fragment shader 
and retrieve the values within my application. For that I am using the render 
to texture feature together with a float texture.

I'm having some trouble reading values > 1.0 though. It seems like the values 
are getting clamped to 0..1, even though I followed the osgprerender HDR setup. 
Besides the code below, I have also tried GL_RGBA32F (ARB and not ARB) for the 
internal texture format, tried double for the image and source type and tried 
using osg::ClampColor to disable clamping for the RTT camera, all without 
success.

When reading the texture, It returns (0.123,0.5,1,1) for every texel.

Code for texture setup:


Code:
radarTexture = new osg::Texture2D;
        radarTexture->setInternalFormat(GL_RGBA16F_ARB);
        radarTexture->setSourceFormat(GL_RGBA);
        radarTexture->setSourceType(GL_FLOAT);

        auto textureImage = osgHelper::make_osgref<osg::Image>();
        textureImage->allocateImage(16,16,1,GL_RGBA, GL_FLOAT);
//      textureImage->setImage(128, 128, 1, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE,
//                      nullptr, osg::Image::AllocationMode::NO_DELETE);
        radarTexture->setImage(textureImage);
        radarTexture->setMaxAnisotropy(0);
        radarTexture->setWrap(osg::Texture::WRAP_S, 
osg::Texture::CLAMP_TO_EDGE);
        radarTexture->setWrap(osg::Texture::WRAP_T, 
osg::Texture::CLAMP_TO_EDGE);
        radarTexture->setFilter(osg::Texture::FilterParameter::MIN_FILTER,
                        osg::Texture::FilterMode::NEAREST);
        radarTexture->setFilter(osg::Texture::FilterParameter::MAG_FILTER,
                        osg::Texture::FilterMode::NEAREST);
        radarTexture->setDataVariance(osg::Object::DYNAMIC);



RTT Camera setup (some)

Code:

// set the camera to render before the main camera.
        this->setRenderOrder(osg::Camera::PRE_RENDER);

        // tell the camera to use OpenGL frame buffer object where supported.
        this->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);

        // attach the texture and use it as the color buffer.
        this->attach(osg::Camera::COLOR_BUFFER0, dest->getImage());



GLSL Fragment Shader Code (simplified):


Code:
void main()
{
gl_FragColor = vec4(0.123,0.5,3,4);
}





Thank you!

Cheers,
Philipp

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=67593#67593





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to