OpenSceneGraph float Image
===

Using C++ and OSG I'm trying to upload a float texture to my shader, but somehow it does not seem to work. At the end I posted some part of my code. Main question is how to create an osg::Image object using data from a float array. In OpenGL the desired code would be

    glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE32F_ARB, width, height, 0, 
                 GL_LUMINANCE, GL_FLOAT, data);
but in this case I have to use OSG.

The code runs fine when using  
    Image image = osgDB::readImageFile("someImage.jpg");  
instead of  
image = new Image;  
but I need to upload generated float data. It's also not possible to switch to unsigned char arrays as I need the GL_LUMINANCE32F_ARB data range in the shader code.

I hope someone can help me here as Google couldn't help me with it (googled for eg: osg float image). So here's my code. Thanks in advance.

    using namespace std;
    using namespace osg;
    //...
    float* data = new float[width*height];
    fill_n(data, size, 1.0); // << I actually do this for testing purposes
    Texture2D texture = new Texture2D;
    Image image = new Image;
    osg::State state = new osg::State;
    Uniform uniform = new Uniform(Uniform::SAMPLER_2D, "texUniform");
    texture->setInternalFormat(GL_LUMINANCE32F_ARB);
    texture->setDataVariance(osg::Object::DYNAMIC);
    texture->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
    texture->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);
    texture->setWrap(osg::Texture2D::WRAP_T, osg::Texture2D::CLAMP_TO_EDGE);
    texture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::CLAMP_TO_EDGE);
    if (data == NULL)
      cout << "texdata null" << endl; // << this is not printed
    image->setImage(width, height, 1, GL_LUMINANCE32F_ARB,
                    GL_LUMINANCE, GL_FLOAT,
                    (unsigned char*)data, osg::Image::USE_NEW_DELETE);
    if (image->getDataPointer() == NULL)
      cout << "datapointernull" << endl; // << this is printed
    if (!image->valid())
      exit(1); //  << here the code exits (hard exit just for testing purposes)
    osgDB::writeImageFile(*image, "blah.png");
    texture->setInternalFormat(GL_LUMINANCE32F_ARB);
    texture->setImage(image);
    camera->getOrCreateStateSet()->setTextureAttributeAndModes(4, texture);
    state->setActiveTextureUnit(4);
    texture->apply(*state);
    uniform->set(4);
    addProgrammUniform(uniform);