//set image
osg::ref_ptr<osg::Image> imageSampler = new osg::Image();
imageSampler->allocateImage((int)XRes, (int)YRes, 1, GL_RGBA, GL_FLOAT);
osg::Vec4f * rgba = (osg::Vec4f *)(imageSampler->data());
// write date to the image
for (int row = 0; row < subYRes; row++) {
for (int column = 0; column < subXRes; <
span style="color:rgb(0,0,0)">column++) {
*rgba = osg::Vec4f(data, data, 0, 0);
rgba++;
}
}
// texture for sampler
osg::ref_ptr<osg::TextureRectangle> textureRect = new osg::TextureRectangle;
textureRect->setTextureSize((int)subXRes, (int)subYRes);
textureRect->setInternalFormat(GL_RGBA);
textureRect->setImage(0, imageSampler);
textureRect->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::NEAREST);
// configure shader
stateset->addUniform(new osg::Uniform("textureID0", 0));
stateset->setTextureAttributeAndModes(0, textureRect, osg::StateAttribute::ON);
// in fragment shader:
uniform sampler2DRect textureID0;
void main()
{
vec2 st=vec2(gl_FragCoord.x -0.5,gl_FragCoord.y-0.5);
vec4 rgba = texelFetch(textureID0, ivec2(st));
Frag_Color = vec4(rgba.r,rgba.g,0,0);
}