Hi Sean, as far as I see you have an error in your setup. This line:
ref_ptr<Uniform> texturesUniform = new Uniform(Uniform::FLOAT, "textures", 1); must be replaced with something like this: ref_ptr<Uniform> texturesUniform = new Uniform(Uniform::SAMPLER_2D_ARRAY, "textures", 0); Try this out. Cheers, Art --- Sean Carmody <[EMAIL PROTECTED]> schrieb: > > Hi Art, > > Thanks for the idea. I do have a Geforce 8800, and > the extensions are reported as being supported. > I've attached a very simple program (shaders inlined > in the code) which shows my setup, if anyone > is interested. Thanks. > > -Sean > > > > Date: Mon, 25 Feb 2008 13:27:55 +0100 > > From: [EMAIL PROTECTED] > > To: [email protected] > > Subject: Re: [osg-users] Texture2DArray shows up > black > > > > Hi Sean, > > > > which graphic card do you have? Texture2DArray do > only > > work fine with G80 chips. I have never tested it > on > > current ATI chips. > > > > Best, > > Art > > > > > > --- Sean Carmody <[EMAIL PROTECTED]> schrieb: > > > > > > > > Hi All, > > > > > > I'm trying to get Texture2DArrays working, but > am > > > having some trouble. My textures always show up > > > black. I'm setting up the texture array as > follows > > > > > > ref_ptr<Texture2DArray> textureArray = new > > > Texture2DArray; > > > textureArray->setTextureDepth(1); > > > Image* image = > > > osgDB::readImageFile('media/skymap.tga'); > > > textureArray->setImage(0, image); > > > stateSet->setTextureAttribute(0, > > > textureArray.get(), osg::StateAttribute::ON); > > > > > > and trying to read it in the shader. > > > > > > #version 120 > > > #extension GL_EXT_gpu_shader4 : enable > > > > > > uniform sampler2DArray rainTextures; > > > > > > void main() > > > { > > > gl_FragColor = > texture2DArray(rainTextures, > > > vec3(gl_TexCoord[0].st, 0)); > > > } > > > > > > Now, if I switch out the Texture2DArray with a > > > normal Texture2D (and update the shader > accordingly) > > > it shows up fine, which leads me to believe the > rest > > > of the app is working. I'm pretty new to OSG > and so > > > am wondering if I missed something obvious with > the > > > setup of the Texture2DArray. Thanks! > > > > > > -Sean > > > > > > > > > _________________________________________________________________ > > > Shed those extra pounds with MSN and The Biggest > > > Loser! > > > http://biggestloser.msn.com/> > > _______________________________________________ > > > osg-users mailing list > > > [email protected] > > > > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > > > > > > > > Lesen Sie Ihre E-Mails jetzt einfach von > unterwegs. > > www.yahoo.de/go > > _______________________________________________ > > osg-users mailing list > > [email protected] > > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > _________________________________________________________________ > Need to know the score, the latest news, or you need > your HotmailĀ®-get your "fix". > http://www.msnmobilefix.com/Default.aspx> #include <osg/Group> > #include <osg/Geode> > #include <osg/ShapeDrawable> > #include <osg/Node> > #include <osgViewer/Viewer> > #include <osg/Texture2DArray> > #include <osgDB/ReadFile> > #include <string> > > using namespace osg; > > void applyShader(Geode* geode) > { > ref_ptr<Program> program = new Program; > program->setName("TexturesTest"); > ref_ptr<Shader> vertObj = new > Shader(Shader::VERTEX); > ref_ptr<Shader> fragObj = new > Shader(Shader::FRAGMENT); > > program->addShader(vertObj.get()); > program->addShader(fragObj.get()); > > ref_ptr<StateSet> stateSet = new osg::StateSet; > ref_ptr<Uniform> texturesUniform = new > Uniform(Uniform::FLOAT, "textures", 1); > stateSet->addUniform(texturesUniform.get()); > stateSet->setAttributeAndModes(program.get(), > StateAttribute::ON); > > ref_ptr<Texture2DArray> textureArray = new > Texture2DArray; > textureArray->setTextureDepth(1); > Image* image = > osgDB::readImageFile("Images/Brick-Std-Orange.TGA"); > textureArray->setImage(0, image); > stateSet->setTextureAttribute(0, > textureArray.get(), osg::StateAttribute::ON); > > std::string vertSource = > "void main()" > "{" > "gl_TexCoord[0].st = gl_MultiTexCoord0.st;" > "gl_Position = ftransform();" > "}"; > vertObj->setShaderSource(vertSource); > > std::string fragSource = > "#version 120\n" > "#extension GL_EXT_gpu_shader4 : enable\n" > "" > "uniform sampler2DArray textures;" > "" > "void main()" > "{" > "gl_FragColor = texture2DArray(textures, > vec3(gl_TexCoord[0].xy, 0));" > "}"; > fragObj->setShaderSource(fragSource); > > geode->setStateSet(stateSet.get()); > } > > int main(int argc, char** argv) > { > setNotifyLevel(osg::DEBUG_INFO); > > // Create a cube > ref_ptr<Group> rootNode = new Group; > Box* cube = new Box(Vec3(0,0,0), 1.0f); > ShapeDrawable* drawable = new ShapeDrawable(cube); > Geode* geode = new Geode(); > geode->addDrawable(drawable); > rootNode->addChild(geode); > > // Apply our shader to this cube > applyShader(geode); > > osgViewer::Viewer viewer; > viewer.setSceneData(rootNode.get()); > return viewer.run(); > } > > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > Lesen Sie Ihre E-Mails auf dem Handy. www.yahoo.de/go _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

