[osg-users] Save the image from computer shader

2016-10-15 Thread liu ming
Hi,

I am learning  the osg example "osgcomputeshaders",I have a problem that how 
can I save the image(the result of a computation) from shaders to my folder ? I 
use the code :

 
Code:
   while(!viewer.done())
{

viewer.frame();

osgDB::writeImageFile(*(tex2D->getImage(0)),"abc.jpg");
}



but it do not work,Could somebody give some suggestions ?

Thank you!

Cheers,
liu

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





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] transfer data to shader with osg::texture

2016-10-05 Thread liu ming
hi Wojtek,Thank you very much,you perfect solved my problem.According to your 
code,Texture2D worked,maybe it is something wrong about Texture1D.  Thank you.

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





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] transfer data to shader with osg::texture

2016-10-05 Thread liu ming
yes,I am getting 0 and 1 in geometry shader,but my input values are :

  
Code:
 *ptr1=osg::Vec3( 0.0,0.0,0.0); 
*ptr1++;
*ptr1= osg::Vec3( 40.0,0.0,0.0); 
*ptr1++;
*ptr1=osg::Vec3( 20.0,0.0,20.0); 



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





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] transfer data to shader with osg::texture

2016-10-05 Thread liu ming
thank you for your reply ,I have tried your solution ,But it still is 
invaild,the Geometry shader can not get original input values.Are there  other 
wrong in code?Thank you for your help.

SMesserschmidt wrote:
> Am 10/5/2016 um 3:37 AM schrieb liu ming:
> 
> > Hi Wojtek ,Thank you for your reply,I have  tried GL_RGBA16F_ARB instead 
> > like that "texture0->setInternalFormat(GL_RGBA16F_ARB);",but  it seemed 
> > like not valid.The value still is 0..1 range.Are there other solutions? 
> > Thank you.
> > 
> So they are now _between_ 0 and , instead of 0 _or_ 1? Then, at least, 
> you're on the right track.
> What  seems wrong however is your sampler setup. Try this instead:
> 
> osg::Uniform* sampler = new osg::Uniform(osg::Uniform::SAMPLER_1D, "data");
> sampler->set(0); //assign unit
> 
> ss->addUniform(sampler);
> 
> ss->setTextureAttribute(0/*unit*/, texture0 ,osg::StateAttribute::ON );
> 
> Cheers
> Sebastian
> 
> 
> 
> 
> > 
> > --
> > Read this topic online here:
> > http://forum.openscenegraph.org/viewtopic.php?p=68852#68852
> > 
> > 
> > 
> > 
> > 
> > ___
> > osg-users mailing list
> > 
> > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> > 
> 
> ___
> osg-users mailing list
> 
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
> 
>  --
> Post generated by Mail2Forum


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





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


Re: [osg-users] transfer data to shader with osg::texture

2016-10-04 Thread liu ming
Hi Wojtek ,Thank you for your reply,I have  tried GL_RGBA16F_ARB instead like 
that "texture0->setInternalFormat(GL_RGBA16F_ARB);",but  it seemed like not 
valid.The value still is 0..1 range.Are there other solutions? Thank you.

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





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org


[osg-users] transfer data to shader with osg::texture

2016-10-04 Thread liu ming
Hi,

  I want to send a set of data to geometry shader with osg::texture,I've got a 
problem:in the geometry shader,I can use glsl  function"texelFetch"to get the 
texel's values,and use the values to draw a triangle,But the values is not 
correct.  the values always are "0" or "1",not the original input.It make me 
confused. whether the code" texture0->setInternalFormat(GL_RGBA16);"  wrong?How 
can I get the correctly texel's values?

The code:
   
 
Code:
  //.
osg::ref_ptr< osg::StateSet > ss = new osg::StateSet;
osg::Texture1D * texture0 = new osg::Texture1D;  
texture0->setDataVariance(osg::Object::DYNAMIC);
osg::ref_ptr image = new osg::Image;
image->allocateImage( 4, 1, 1,  GL_RGB, GL_FLOAT );
//write data to the image
   osg::Vec3* ptr1 = (osg::Vec3*)image->data();
   *ptr1=osg::Vec3( 0.0,0.0,0.0); 
   *ptr1++;
   *ptr1= osg::Vec3( 40.0,0.0,0.0); 
   *ptr1++;
   *ptr1=osg::Vec3( 20.0,0.0,20.0); 

 texture0->setImage(image);  
 texture0->setInternalFormat(GL_RGBA16);
//
osg::ref_ptr< osg::Uniform > sample0 = new osg::Uniform( "data", 0 );
   ss->addUniform(sample0);
ss->setTextureAttributeAndModes(0,
texture0,osg::StateAttribute::ON);  
   // 
  
  //--
  //geometyr shader code
  //--
  //.
  uniform sampler1D data;
  void main()
{
//get the texel's value,but the value is wrong
vec4 C0=vec4(texelFetch(data,0,0).xyz,1.0);
vec4 C1=vec4(texelFetch(data,1,0).xyz,1.0);
vec4 C2=vec4(texelFetch(data,2,0).xyz,1.0);

//use value to draw a triangle
gl_Position=osg_ModelViewProjectionMatrix*C0;
EmitVertex();
gl_Position=osg_ModelViewProjectionMatrix*C1;
EmitVertex();
gl_Position=osg_ModelViewProjectionMatrix*C2;
EmitVertex();

EndPrimitive();
}



Thank you! My english is poor ,sorry.

Cheers,
liu

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





___
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org