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

liu ming 81792534 at qq.com
Tue Oct 4 08:00:17 PDT 2016


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<osg::Image> 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








More information about the osg-users mailing list