Show
Ignore:
Timestamp:
08/09/05 11:11:15 (9 years ago)
Author:
robert
Message:

Added GLSL shader pathway into osgforest.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/examples/osgforest/osgforest.cpp

    r4395 r4429  
    1616 
    1717#include <osgDB/ReadFile> 
     18#include <osgDB/FileUtils> 
    1819 
    1920#include <osgUtil/IntersectVisitor> 
     
    776777                ++itr) 
    777778            { 
    778 #if 0 
    779779                glColor4fv(itr->ptr()); 
    780                 _geometry->drawImplementation(state); 
    781 #else 
    782                 glPushMatrix(); 
    783                 glTranslatef((*itr)[0], (*itr)[1], (*itr)[2]); 
    784                 glScalef( (*itr)[3],(*itr)[3],(*itr)[3] ); 
    785                 _geometry->drawImplementation(state); 
    786                 glPopMatrix(); 
    787 #endif 
     780                _geometry->draw(state); 
    788781            } 
    789782        } 
     
    967960 
    968961    _techniqueSwitch = new osg::Switch; 
    969      
     962 
    970963    { 
    971964        std::cout<<"Creating billboard based forest..."; 
     
    994987        std::cout<<"done."<<std::endl; 
    995988    } 
    996      
     989 
    997990    { 
    998991        osg::Group* group = new osg::Group; 
     
    1005998 
    1006999        { 
     1000            osg::Program* program = new osg::Program; 
     1001            stateset->setAttribute(program); 
     1002 
     1003#if 1 
     1004            // use inline shaders 
     1005             
    10071006            /////////////////////////////////////////////////////////////////// 
    10081007            // vertex shader using just Vec4 coefficients 
    10091008            char vertexShaderSource[] =  
    1010                 "void main(void) \n" 
    1011                 "{ \n" 
     1009                "varying vec2 texcoord;\n" 
    10121010                "\n" 
    1013                 "    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" 
     1011                "void main(void)\n" 
     1012                "{\n" 
     1013                "    vec3 position = gl_Vertex.xyz * gl_Color.w + gl_Color.xyz;\n" 
     1014                "    gl_Position     = gl_ModelViewProjectionMatrix * vec4(position,1.0);\n" 
     1015                "    gl_FrontColor = vec4(1.0,1.0,1.0,1.0);\n" 
     1016                "    texcoord = gl_MultiTexCoord0.st;\n" 
    10141017                "}\n"; 
    10151018 
     
    10191022            char fragmentShaderSource[] =  
    10201023                "uniform sampler2D baseTexture; \n" 
     1024                "varying vec2 texcoord; \n" 
    10211025                "\n" 
    10221026                "void main(void) \n" 
    10231027                "{ \n" 
    1024                 "    gl_FragColor = texture2D( baseTexture, gl_TexCoord[0].xy); \n" 
     1028                "    gl_FragColor = texture2D( baseTexture, texcoord); \n" 
    10251029                "}\n"; 
    10261030 
    1027  
    1028             osg::Program* program = new osg::Program; 
    1029             stateset->setAttribute(program); 
    1030  
    1031             //osg::Shader* vertex_shader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource); 
    1032             //program->addShader(vertex_shader); 
     1031            osg::Shader* vertex_shader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource); 
     1032            program->addShader(vertex_shader); 
    10331033 
    10341034            osg::Shader* fragment_shader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderSource); 
    10351035            program->addShader(fragment_shader); 
     1036             
     1037#else 
     1038 
     1039            // get shaders from source 
     1040            program->addShader(osg::Shader::readShaderFile(osg::Shader::VERTEX, osgDB::findDataFile("shaders/forest.vert"))); 
     1041            program->addShader(osg::Shader::readShaderFile(osg::Shader::FRAGMENT, osgDB::findDataFile("shaders/forest.frag"))); 
     1042 
     1043#endif 
    10361044 
    10371045            osg::Uniform* baseTextureSampler = new osg::Uniform("baseTexture",0);