Changeset 20
- Timestamp:
- 01/07/2008 04:53:38 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 7 edited
-
LICENSE.txt (added)
-
include/osgPPU/PostProcessUnit.h (modified) (3 diffs)
-
src/example/Makefile (modified) (1 diff)
-
src/example/hdrppu.cpp (modified) (3 diffs)
-
src/osgPPU/PPUInOut.cpp (modified) (9 diffs)
-
src/osgPPU/PostProcess.cpp (modified) (2 diffs)
-
src/osgPPU/PostProcessUnit.cpp (modified) (7 diffs)
-
src/osgPPU/Shader.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/osgPPU/PostProcessUnit.h
r19 r20 181 181 inline osg::Viewport* getViewport() { return mViewport.get(); } 182 182 183 inline void setE xpireBlendTime(float time) { mExpireTime = time; }183 inline void setEndBlendTime(float time) { mExpireTime = time; } 184 184 inline void setBlendDuration(float time) { mExpireTime = mStartTime + time; } 185 inline float getE xpireBlendTime() const { return mExpireTime; }185 inline float getEndBlendTime() const { return mExpireTime; } 186 186 187 187 inline void setStartBlendTime(float time) { mStartTime = time; } … … 271 271 272 272 //! Shall we use mipmaps at all 273 inline void setUseMipmaps(bool b) { mbUseMipmaps = b; }273 inline void setUseMipmaps(bool b) { mbUseMipmaps = b; if (b) enableMipmapGeneration(); } 274 274 275 275 //! Set user data … … 429 429 //! Dirty Shader 430 430 bool mbDirtyShader; 431 432 //! Current color fo the geometry quad433 osg::ref_ptr<osg::Vec4Array> mScreenQuadColor;434 431 435 432 //! This ppu is marked as not to be included into the rendering graph -
trunk/src/example/Makefile
r11 r20 21 21 LIBS += -losgPPU -losgViewer 22 22 LDFLAGS = $(LIBPATH) $(LIBS) 23 #CFLAGS= -g -Wall -m32 $(INCPATH) 23 24 24 25 # directory where to put result in -
trunk/src/example/hdrppu.cpp
r14 r20 69 69 lumShader->addShader(osg::Shader::readShaderFile(osg::Shader::FRAGMENT, "Data/luminance_fp.glsl")); 70 70 lumShader->setName("LuminanceShader"); 71 71 lumShader->add("texUnit0", osg::Uniform::SAMPLER_2D); 72 lumShader->set("texUnit0", 0); 73 72 74 // create shader which do compute the scene's luminance in mipmap levels 73 75 osgPPU::Shader* lumShaderMipmap = new osgPPU::Shader(); 74 76 lumShaderMipmap->addShader(osg::Shader::readShaderFile(osg::Shader::FRAGMENT, "Data/luminance_mipmap_fp.glsl")); 75 77 lumShaderMipmap->setName("LuminanceShaderMipmap"); 78 79 // setup input texture 80 lumShader->add("texUnit0", osg::Uniform::SAMPLER_2D); 81 lumShader->set("texUnit0", 0); 76 82 77 83 // setup shader parameters … … 180 186 gaussx->set("radius", mHDRBlurRadius); 181 187 188 gaussx->add("texUnit0", osg::Uniform::SAMPLER_2D); 189 gaussx->set("texUnit0", 0); 190 182 191 blurx->setShader(gaussx); 183 192 … … 193 202 gaussy->set("sigma", mHDRBlurSigma); 194 203 gaussy->set("radius", mHDRBlurRadius); 204 205 gaussy->add("texUnit0", osg::Uniform::SAMPLER_2D); 206 gaussy->set("texUnit0", 0); 195 207 196 208 blury->setShader(gaussy); -
trunk/src/osgPPU/PPUInOut.cpp
r19 r20 66 66 if (mShader.valid()) 67 67 { 68 //mShader->set("g_TextureWidth", (float)(mViewport->x() + mViewport->width()));69 //mShader->set("g_TextureHeight",(float)(mViewport->y() + mViewport->height()));70 68 mShader->set("g_ViewportWidth", (float)mViewport->width()); 71 69 mShader->set("g_ViewportHeight", (float)mViewport->height()); … … 79 77 // apply viewport if such is valid 80 78 if (mViewport.valid()) mViewport->apply(*sState.getState()); 81 79 82 80 // render the content of the input texture into the frame buffer 83 81 if (useBlendMode()) 84 82 { 85 //glEnable(GL_BLEND);83 glEnable(GL_BLEND); 86 84 glColor4f(1,1,1, getCurrentBlendValue()); 87 85 } … … 89 87 if (useBlendMode()) 90 88 { 91 //glDisable(GL_BLEND);89 glDisable(GL_BLEND); 92 90 glColor4f(1,1,1,1); 93 91 } … … 244 242 245 243 // setup viewport 246 osg::Viewport* vp = new osg::Viewport(*mViewport);247 setViewport(vp);248 } 249 sScreenQuad->getOrCreateStateSet()->setAttribute(mViewport.get(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE);244 //osg::Viewport* vp = new osg::Viewport(*mViewport); 245 //setViewport(*mViewport); 246 } 247 //sScreenQuad->getOrCreateStateSet()->setAttribute(mViewport.get(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); 250 248 251 249 // clean mipmap data for output … … 313 311 // set fbo of current level with to this output 314 312 fbo->setAttachment(GL_COLOR_ATTACHMENT0_EXT + mrt, osg::FrameBufferAttachment(output.get(), level)); 315 316 //printf("fbo %s: %d (%d) = %p, fmt=0x%x\n", getResourceName().c_str(), mrt, level, output.get(), output->getInternalFormat());317 313 } 318 314 … … 344 340 for (int i=0; i < mNumLevels; i++) 345 341 { 346 // set mipmap level347 //if (mShaderMipmapLevelUniform.valid()) mShaderMipmapLevelUniform->set(float(i));348 //if (mShader.valid()) mShader->set("g_MipmapLevel", i);349 350 342 // assign new viewport and fbo 351 343 mViewport = mIOMipmapViewport[i]; 352 344 mFBO = mIOMipmapFBO[i]; 353 345 354 //printf("io-mipmap %s %d, (%dx%d) \n", getName().c_str(), i, (int)mViewport->width(), (int)mViewport->height());355 356 346 // render the content 357 347 doRender(i); … … 373 363 mbDirtyOutputTextures = b; 374 364 mbMipmappedIO = b; 365 if (b) enableMipmapGeneration(); 375 366 } 376 367 … … 386 377 if (mipmapLevel < 0) mipmapLevel = 0; 387 378 // update shaders manually, because they are do not updated from scene graph 388 /*if (mShaderMipmapLevelUniform.valid() && mShaderMipmapLevelUniform->getUpdateCallback())389 {390 (*mShaderMipmapLevelUniform->getUpdateCallback())(mShaderMipmapLevelUniform.get(), new osgUtil::UpdateVisitor());391 }*/392 // setup shader values393 379 if (mShader.valid()) 394 380 { 395 mShader->set("g_ TextureWidth", (float)(mViewport->x() + mViewport->width()));396 mShader->set("g_ TextureHeight",(float)(mViewport->y() + mViewport->height()));381 mShader->set("g_ViewportWidth", (float)mViewport->width()); 382 mShader->set("g_ViewportHeight", (float)mViewport->height()); 397 383 mShader->set("g_MipmapLevel", mipmapLevel); 398 384 mShader->update(); … … 408 394 mViewport->apply(*sState.getState()); 409 395 410 // bind all input texture411 TextureMap::const_iterator it = mInputTex.begin();412 for (int unit=0; it != mInputTex.end(); it++, unit++)413 {414 sState.getState()->applyTextureMode(unit, it->second->getTextureTarget(), true);415 sState.getState()->applyTextureAttribute(unit, it->second.get());416 }417 418 #if 0419 if (mShader.valid())420 printf("render: %s - %s (level=%d, %dx%d)\n", getName().c_str(), mShader->getName().c_str(), mipmapLevel, int(mViewport->x() + mViewport->width()), int(mViewport->y() + mViewport->height()));421 else422 printf("render: %s (level=%d, %dx%d)\n", getName().c_str(),mipmapLevel, int(mViewport->x() + mViewport->width()), int(mViewport->y() + mViewport->height()));423 #endif424 425 396 // render the content of the input texture into the frame buffer 426 397 if (useBlendMode() && getOfflineMode() == false) -
trunk/src/osgPPU/PostProcess.cpp
r19 r20 350 350 printf("\t vp (ref %d): %d %d %d %d\n", (*it)->getInputTextureIndexForViewportReference(), (int)(*it)->getViewport()->x(), (int)(*it)->getViewport()->y(),(int)(*it)->getViewport()->width(), (int)(*it)->getViewport()->height()); 351 351 printf("\t alpha: %f (%f %f)\n", (*it)->getCurrentBlendValue(), (*it)->getStartBlendValue(), (*it)->getEndBlendValue()); 352 printf("\t time: %f-%f\n", (*it)->getStart Time(), (*it)->getExpireTime());//, Engine::sClock()->getTime());352 printf("\t time: %f-%f\n", (*it)->getStartBlendTime(), (*it)->getEndBlendTime());//, Engine::sClock()->getTime()); 353 353 printf("\t shader: %p\n", (*it)->getShader()); 354 354 … … 375 375 { 376 376 osg::Texture* tex = (*it)->getInputTexture(i); 377 printf(" %p ", tex); 378 if (tex) printf("(%dx%d)", tex->getTextureWidth(), tex->getTextureHeight()); 379 } 377 printf(" %p", tex); 378 if (tex) 379 { 380 if ((*it)->getStateSet()->getTextureAttribute(i, osg::StateAttribute::TEXTURE)) 381 printf("-attr"); 382 printf(" (%dx%d), ", tex->getTextureWidth(), tex->getTextureHeight()); 383 } 384 } 385 380 386 printf("\n\t output: "); 381 387 for (unsigned int i=0; i < (*it)->getOutputTextureMap().size(); i++) -
trunk/src/osgPPU/PostProcessUnit.cpp
r19 r20 50 50 // we do steup defaults 51 51 setStartBlendTime(0); 52 setE xpireBlendTime(0);52 setEndBlendTime(0); 53 53 setStartBlendValue(1); 54 54 setEndBlendValue(1); … … 77 77 78 78 // remove colors form geometry 79 mScreenQuadColor = new osg::Vec4Array(1);80 (* mScreenQuadColor)[0].set(1.0f,1.0f,1.0,1.0f);81 sScreenQuad->setColorArray( NULL);79 osg::Vec4Array* screenQuadColor = new osg::Vec4Array(1); 80 (*screenQuadColor)[0].set(1.0f,1.0f,1.0,1.0f); 81 sScreenQuad->setColorArray(screenQuadColor); 82 82 sScreenQuad->setColorBinding(osg::Geometry::BIND_OFF); 83 83 … … 98 98 99 99 // setup per default local state equal to the parent state 100 sState.setState(mParent->getState()); 100 if (mParent.valid()) 101 sState.setState(mParent->getState()); 101 102 102 103 // setup uniform variable … … 134 135 mbDirtyOutputTextures(ppu.mbDirtyOutputTextures), 135 136 mbDirtyShader(ppu.mbDirtyShader), 136 mScreenQuadColor(ppu.mScreenQuadColor),137 137 mbOfflinePPU(ppu.mbOfflinePPU), 138 138 mOutputInternalFormat(ppu.mOutputInternalFormat), … … 345 345 346 346 // check if input textures are dirty 347 if (mbDirtyInputTextures )347 if (mbDirtyInputTextures || mbDirtyShader) 348 348 { 349 349 // reassign them … … 424 424 425 425 // if we get 0 as expire time, so the factor is the start value 426 if (getE xpireBlendTime() < 0.0001)426 if (getEndBlendTime() < 0.0001) 427 427 factor = 0; 428 428 else 429 factor = (mTime - getStartBlendTime()) / (getE xpireBlendTime() - getStartBlendTime());429 factor = (mTime - getStartBlendTime()) / (getEndBlendTime() - getStartBlendTime()); 430 430 431 431 // compute blend value for the ppu 432 432 float alpha = getStartBlendValue()*(1-factor) + factor*getEndBlendValue(); 433 if (alpha > 1.0 ) { alpha = 1.0; setE xpireBlendTime(0); setStartBlendValue(1.0); }434 if (alpha < 0.0 ) { alpha = 0.0; setE xpireBlendTime(0); setStartBlendValue(0.0); }433 if (alpha > 1.0 ) { alpha = 1.0; setEndBlendTime(0); setStartBlendValue(1.0); } 434 if (alpha < 0.0 ) { alpha = 0.0; setEndBlendTime(0); setStartBlendValue(0.0); } 435 435 436 436 // setup new alpha value … … 626 626 { 627 627 // if viewport is valid and we have to ignore new settings 628 if (mViewport.valid() && getInputTextureIndexForViewportReference() >=0) 628 if ((mViewport.valid() && getInputTextureIndexForViewportReference() >=0) 629 || vp == NULL) 629 630 return; 630 631 -
trunk/src/osgPPU/Shader.cpp
r13 r20 183 183 mUniforms[name] = osg::StateSet::RefUniformPair(param, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE | osg::StateAttribute::PROTECTED); 184 184 onAddUniform(param); 185 //printf("%s add uniform %s\n", getName().c_str(), param->getName().c_str()); 185 186 } 186 187 } … … 345 346 // check whenever such an uniform already exists, if not so add it 346 347 if (!isUniformExists(name)) add(name, osg::Uniform::INT, 1); 347 else{348 /*else{ 348 349 // non valid texture, so remove it 349 if ( !t)350 if (t == NULL) 350 351 { 351 352 TexUnitDb::iterator it = mTexUnits.find(name); … … 353 354 return false; 354 355 } 355 } 356 }*/ 356 357 357 358 // check if index is valid … … 393 394 // texture boundings are dirty now 394 395 mDirtyBoundings = true; 396 397 //printf("%s bind %s-%d\n", getName().c_str(), name.c_str(), unit); 395 398 396 399 // just set value if predefined 397 if (unit >= 0) set(index, name, (int)unit); 400 if (unit >= 0) 401 { 402 set(index, name, (int)unit); 403 } 398 404 399 405 // inform derived classes about this … … 537 543 538 544 // remove all previous texture attributes 539 for (int i=0; i < mMaxTextureUnits; i++)540 {541 ss->removeTextureAttribute(i, osg::StateAttribute::TEXTURE);542 }545 //for (int i=0; i < mMaxTextureUnits; i++) 546 //{ 547 // ss->removeTextureAttribute(i, osg::StateAttribute::TEXTURE); 548 //} 543 549 544 550 #if DEBUG_SH
Note: See TracChangeset
for help on using the changeset viewer.
