From 45822caed48e440827f75f763bfc322920933074 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 15 Jan 2007 09:14:36 +0000 Subject: [PATCH] Reverted the experimental shader code --- examples/osgparametric/osgparametric.cpp | 322 ++--------------------- 1 file changed, 17 insertions(+), 305 deletions(-) diff --git a/examples/osgparametric/osgparametric.cpp b/examples/osgparametric/osgparametric.cpp index eb5a63db9..bd563ef17 100644 --- a/examples/osgparametric/osgparametric.cpp +++ b/examples/osgparametric/osgparametric.cpp @@ -11,7 +11,6 @@ #include #include -#include #include @@ -60,26 +59,10 @@ char vertexShaderSource_texture[] = "\n" " gl_TexCoord[0] = gl_Vertex; \n" " vec4 vert = gl_Vertex; \n" - " vert.z = texture2D( vertexTexture, gl_TexCoord[0].xy).x*0.1; \n" + " vert.z = texture2D( vertexTexture, gl_TexCoord[0].xy).x*0.0001; \n" " gl_Position = gl_ModelViewProjectionMatrix * vert;\n" "}\n"; -////////////////////////////////////////////////////////////////// -// vertex shader using texture read -char vertexShaderSource_texture2[] = - "uniform sampler2D vertexTexture; \n" - "uniform sampler2D vertexTexture2; \n" - "uniform float osg_FrameTime;\n" - "\n" - "void main(void) \n" - "{ \n" - "\n" - " gl_TexCoord[0] = gl_Vertex; \n" - " vec4 vert = gl_Vertex; \n" - " float r = 1.0 + 0.5 * sin(osg_FrameTime);\n" - " vert.z = (texture2D( vertexTexture, gl_TexCoord[0].xy).x * (1-r) + texture2D( vertexTexture2, gl_TexCoord[0].xy).x * r)*0.1; \n" - " gl_Position = gl_ModelViewProjectionMatrix * vert;\n" - "}\n"; ////////////////////////////////////////////////////////////////// // fragment shader @@ -92,33 +75,7 @@ char fragmentShaderSource[] = " gl_FragColor = texture2D( baseTexture, gl_TexCoord[0].xy); \n" "}\n"; -#if 0 -char fragmentShaderNormalSource[] = - "uniform sampler2D baseTexture; \n" - "uniform sampler2D vertexTexture; \n" - "\n" - "void main(void) \n" - "{ \n" - " const float dx = 0.0010; \n" - " const float dy = 0.0010; \n" - " float dz_dx = texture2D( vertexTexture, gl_TexCoord[0].xy + vec2(dx,0.0)).x - texture2D( vertexTexture, gl_TexCoord[0].xy + vec2(-dx,0.0)).x; \n" - " float dz_dy = texture2D( vertexTexture, gl_TexCoord[0].xy + vec2(0.0,dy)).x - texture2D( vertexTexture, gl_TexCoord[0].xy + vec2(0.0,-dy)).x; \n" - " vec3 normal = normalize(vec3(-dz_dx, -dz_dy, dx*50));\n" - " \n" - " gl_FragColor = vec4(normal.z,normal.z,normal.z,1.0); \n" - "}\n"; -#else -char fragmentShaderNormalSource[] = - "uniform sampler2D baseTexture; \n" - "uniform sampler2D vertexTexture; \n" - "\n" - "void main(void) \n" - "{ \n" - " vec3 normal = normalize(texture2D( baseTexture, gl_TexCoord[0].xy).xyz);\n" - " \n" - " gl_FragColor = vec4(normal.z,normal.z,normal.z,1.0); \n" - "}\n"; -#endif + class UniformVarying : public osg::Uniform::Callback { @@ -130,7 +87,7 @@ class UniformVarying : public osg::Uniform::Callback } }; -osg::Node* createModel(const std::string& shader, const std::string& textureFileName, const std::string& terrainFileName, const std::string& terrainFileName2, unsigned int cacheSize, unsigned int maxSize, bool joinStrips, const std::string& mesh) +osg::Node* createModel(const std::string& shader, const std::string& textureFileName, const std::string& terrainFileName) { osg::Geode* geode = new osg::Geode; @@ -176,6 +133,8 @@ osg::Node* createModel(const std::string& shader, const std::string& textureFile } else if (shader=="texture") { + osg::Shader* vertex_shader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource_texture); + program->addShader(vertex_shader); osg::Image* image = 0; @@ -209,54 +168,17 @@ osg::Node* createModel(const std::string& shader, const std::string& textureFile vertexTexture->setFilter(osg::Texture::MIN_FILTER,osg::Texture::NEAREST); vertexTexture->setFilter(osg::Texture::MAG_FILTER,osg::Texture::NEAREST); - vertexTexture->setInternalFormat(GL_LUMINANCE_FLOAT32_ATI); - - vertexTexture->setResizeNonPowerOfTwoHint(false); stateset->setTextureAttributeAndModes(1,vertexTexture); osg::Uniform* vertexTextureSampler = new osg::Uniform("vertexTexture",1); stateset->addUniform(vertexTextureSampler); - if (!terrainFileName2.empty()) - { - osg::Image* image2 = osgDB::readImageFile(terrainFileName2); - osg::Texture2D* vertexTexture2 = new osg::Texture2D(image2); - - - vertexTexture2->setFilter(osg::Texture::MIN_FILTER,osg::Texture::NEAREST); - vertexTexture2->setFilter(osg::Texture::MAG_FILTER,osg::Texture::NEAREST); - - vertexTexture2->setInternalFormat(GL_LUMINANCE_FLOAT32_ATI); - - vertexTexture2->setResizeNonPowerOfTwoHint(false); - stateset->setTextureAttributeAndModes(2,vertexTexture2); - - osg::Uniform* vertexTextureSampler2 = new osg::Uniform("vertexTexture2",2); - stateset->addUniform(vertexTextureSampler2); - - } - } - if (terrainFileName2.empty()) - { - osg::Shader* fragment_shader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderNormalSource); - program->addShader(fragment_shader); + osg::Shader* fragment_shader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderSource); + program->addShader(fragment_shader); - osg::Shader* vertex_shader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource_texture); - program->addShader(vertex_shader); - } - else - { - - osg::Shader* fragment_shader = new osg::Shader(osg::Shader::FRAGMENT, fragmentShaderSource); - program->addShader(fragment_shader); - - osg::Shader* vertex_shader = new osg::Shader(osg::Shader::VERTEX, vertexShaderSource_texture2); - program->addShader(vertex_shader); - } - osg::Texture2D* texture = new osg::Texture2D(osgDB::readImageFile(textureFileName)); stateset->setTextureAttributeAndModes(0,texture); @@ -289,215 +211,20 @@ osg::Node* createModel(const std::string& shader, const std::string& textureFile geom->setVertexArray(vertices); - unsigned int totalIndices = 0; - if (mesh=="triangles" || mesh=="tristrip") + for(iy=0; iyaddPrimitiveSet(elements); - elements->dirty(); - - for(unsigned int is=0; issize() > maxSize) - { - osg::notify(osg::NOTICE)<<"elements->size() = "<size()<size(); - - index=0; - elements = new osg::DrawElementsUInt(GL_TRIANGLES); - geom->addPrimitiveSet(elements); - elements->dirty(); - - } - - if (rightToLeft) - { - - index = iy * num_x + is; - - for(unsigned int ix = 0; ixsize(); - osg::notify(osg::NOTICE)<<"elements->size() = "<size()<dirty(); - unsigned int element_no = 0; - for(iy=0; iyaddPrimitiveSet(elements); - osg::notify(osg::NOTICE)<<"elements->size() = "<size()<addPrimitiveSet(elements); } - else - { - if (cacheSize) - { - bool needToJoin = false; - unsigned int index=0; - osg::DrawElementsUInt* elements = new osg::DrawElementsUInt(GL_TRIANGLE_STRIP); - geom->addPrimitiveSet(elements); - elements->dirty(); - - for(unsigned int is=0; issize() > maxSize) - { - osg::notify(osg::NOTICE)<<"elements->size() = "<size()<size(); - - needToJoin = false; - index=0; - elements = new osg::DrawElementsUInt(GL_TRIANGLE_STRIP); - geom->addPrimitiveSet(elements); - elements->dirty(); - - } - - if (needToJoin) (*elements).push_back(elements->back()); - - if (rightToLeft) - { - - index = iy * num_x + is; - - if (needToJoin) (*elements).push_back(index + num_x); - - for(unsigned int ix = 0; ixsize(); - } - else - { - osg::DrawElementsUInt* elements = new osg::DrawElementsUInt(GL_TRIANGLE_STRIP); - elements->dirty(); - geom->addPrimitiveSet(elements); - bool needToJoin = false; - unsigned int index=0; - for(iy=0; iysetUseVertexBufferObjects(true); -#else - geom->setUseVertexBufferObjects(false); -#endif + // geom->setUseVertexBufferObjects(true); return geode; } @@ -524,21 +251,6 @@ int main(int argc, char *argv[]) std::string terrainFileName(""); while(arguments.read("-d",terrainFileName)) {} - std::string terrainFileName2(""); - while(arguments.read("-d2",terrainFileName2)) {} - - unsigned int cacheSize = 0; - while(arguments.read("--cache",cacheSize)) {} - - unsigned int maxSize = 2048; - while(arguments.read("--max",maxSize)) {} - - std::string mesh("strip"); - while(arguments.read("--mesh",mesh)) {} - - bool joinStrips = false; - while(arguments.read("--join")) { joinStrips = true; } - // if user request help write it out to cout. if (arguments.read("-h") || arguments.read("--help")) { @@ -547,7 +259,7 @@ int main(int argc, char *argv[]) } // load the nodes from the commandline arguments. - osg::Node* model = createModel(shader,textureFileName,terrainFileName,terrainFileName2, cacheSize, maxSize, joinStrips,mesh); + osg::Node* model = createModel(shader,textureFileName,terrainFileName); if (!model) { return 1;