[osg-users] Save the image from computer shader
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
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
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
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
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
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