Hi,

Thanks!

I tried that a moment ago. The results are still filtered.

What about  the internal mode of the image?

There are just so many of them.

Shuiying

On 09/04/2014 02:15 PM, [email protected] wrote:
Message: 10
Date: Thu, 4 Sep 2014 14:15:52 +0200
From: Christian Buchner<[email protected]>
To: OpenSceneGraph Users<[email protected]>
Subject: Re: [osg-users] Help: how to send non-filtered sampler2Drect
        to fragment shader?
Message-ID:
        <CALm6U+o22xDgKEtpUkKhHuUOG=h8q7zPTTQ=8r9tz-1Ft=a...@mail.gmail.com>
Content-Type: text/plain; charset="utf-8"

Hi,

have you tried also setting the minification filter to NEAREST?

osg::Texture2D::MIN_FILTER


Christian



2014-09-04 13:14 GMT+02:00 shuiying Wang<[email protected]>:

>  Hello,
>
>I would like the fragment shader to read values from a uniform
>sampler2DRect.
>
>The sampler2DRect stores some data that I want to give to the shader.
>
>The problem is  that the shader always gets filtered value of the actual
>data. I want the shader to get the exact value without any filtering.
>
>I use the following binding method and shader programming:
>
>//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);
>}
>
>If I read the frame buffer, the value of rgba.r and rgba.g seem to be filtered 
value, not exactly what the real value.
>
>Where I am wrong here ?
>
>Thanks a lot!
>
>Best wishes
>Shuiying
>

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

Reply via email to