diff --git a/Source/System/NodeCores/Groups/Effects/HDR/OSGHDRStage.cpp b/Source/System/NodeCores/Groups/Effects/HDR/OSGHDRStage.cpp index 7b3b52502..ce5206a8d 100644 --- a/Source/System/NodeCores/Groups/Effects/HDR/OSGHDRStage.cpp +++ b/Source/System/NodeCores/Groups/Effects/HDR/OSGHDRStage.cpp @@ -135,6 +135,9 @@ Action::ResultE HDRStage::renderEnter(Action *action) a->disableDefaultPartition(); + Int32 iVPWidth = a->getActivePartition()->getViewportWidth (); + Int32 iVPHeight = a->getActivePartition()->getViewportHeight(); + this->beginPartitionGroup(a); { this->pushPartition(a); @@ -147,10 +150,14 @@ Action::ResultE HDRStage::renderEnter(Action *action) if(pTarget == NULL) { - this->initData(a); + this->initData(a, iVPWidth, iVPHeight); pTarget = this->getRenderTarget(); } + else + { + this->updateData(a, iVPWidth, iVPHeight); + } pPart->setRenderTarget(pTarget); @@ -586,8 +593,45 @@ void HDRStage::resizeStageData(HDRStageData *pData, Int32 iPixelWidth, Int32 iPixelHeight) { - FWARNING(("HDRStage resize not implemented ==> wrong results\n")); -} + FrameBufferObject *pSceneFBO = this->getRenderTarget(); + + pSceneFBO->resizeAll(iPixelWidth, iPixelHeight); + + + FrameBufferObject *pShrinkFBO = pData->getShrinkRenderTarget(); + + pShrinkFBO->resizeAll(iPixelWidth / 2, iPixelHeight / 2); + + + FrameBufferObject *pBlurFBO = pData->getBlurRenderTarget(); + + pBlurFBO->resizeAll(iPixelWidth / 4, + iPixelHeight / 4); + + + SimpleSHLChunk *pHBlurShader = pData->getHBlurShader(); + + std::string szNewFragProg = + generate1DConvolutionFilterFPString(getBlurWidth(), + false, + true, + iPixelWidth / 2, + iPixelHeight / 2); + + pHBlurShader->setFragmentProgram(szNewFragProg); + + szNewFragProg = generate1DConvolutionFilterFPString(getBlurWidth(), + true, + true, + iPixelWidth / 2, + iPixelHeight / 2); + + SimpleSHLChunkUnrecPtr pVBlurShader = pData->getVBlurShader(); + + pVBlurShader->setFragmentProgram(szNewFragProg); + + commitChanges(); +} void HDRStage::postProcess(DrawEnv *pEnv) { @@ -618,15 +662,6 @@ void HDRStage::postProcess(DrawEnv *pEnv) return; } - if((pData->getWidth () != pEnv->getPixelWidth() ) || - (pData->getHeight() != pEnv->getPixelHeight()) ) - { - resizeStageData(pData, - pEnv->getPixelWidth(), - pEnv->getPixelHeight()); - } - - // Shrink to w/2 h/2 FrameBufferObject *pShrinkTarget = pData->getShrinkRenderTarget(); @@ -703,16 +738,22 @@ void HDRStage::postProcess(DrawEnv *pEnv) // HBlur - StateOverride oOverride; - GLenum aDrawBuffers[] = { GL_COLOR_ATTACHMENT1_EXT }; +#define OVERSHADER 1 + +#if OVERSHADER + StateOverride oOverride; + oOverride.addOverride(pData->getHBlurShader()->getClassId(), pData->getHBlurShader()); pEnv->activateState(pBlurState, &oOverride); - +#else + pData->getHBlurShader()->activate(pEnv); +#endif + osgGlDrawBuffers(1, aDrawBuffers); @@ -732,10 +773,13 @@ void HDRStage::postProcess(DrawEnv *pEnv) } glEnd(); - +#if !OVERSHADER + pData->getHBlurShader()->deactivate(pEnv); +#endif // VBlur +#if OVERSHADER StateOverride oOverride1; oOverride1.addOverride(pData->getVBlurShader()->getClassId(), @@ -743,6 +787,9 @@ void HDRStage::postProcess(DrawEnv *pEnv) pEnv->activateState(pBlurState, &oOverride1); +#else + pData->getVBlurShader()->activate(pEnv); +#endif aDrawBuffers[0] = GL_COLOR_ATTACHMENT0_EXT; @@ -764,6 +811,9 @@ void HDRStage::postProcess(DrawEnv *pEnv) } glEnd(); +#if !OVERSHADER + pData->getVBlurShader()->deactivate(pEnv); +#endif pBlurTarget->deactivate(pEnv); @@ -808,7 +858,9 @@ void HDRStage::postProcess(DrawEnv *pEnv) glPopMatrix(); } -void HDRStage::initData(RenderAction *pAction) +void HDRStage::initData(RenderAction *pAction, + Int32 iVPWidth, + Int32 iVPHeight) { HDRStageDataUnrecPtr pData = pAction->getData(_iDataSlotId); @@ -822,17 +874,51 @@ void HDRStage::initData(RenderAction *pAction) pData->setHeight(pViewport->getPixelHeight()); #endif + fprintf(stderr, "use pixe size %d %d\n", + pAction->getActivePartition()->getViewportWidth (), + pAction->getActivePartition()->getViewportHeight()); + +#if 0 pData = setupStageData( pAction->getActivePartition()->getViewportWidth (), pAction->getActivePartition()->getViewportHeight()); pData->setWidth (pAction->getActivePartition()->getViewportWidth ()); pData->setHeight(pAction->getActivePartition()->getViewportHeight()); +#endif + + pData = setupStageData(iVPWidth, + iVPHeight); + + pData->setWidth (iVPWidth ); + pData->setHeight(iVPHeight); this->setData(pData, _iDataSlotId, pAction); } } +void HDRStage::updateData(RenderAction *pAction, + Int32 iVPWidth, + Int32 iVPHeight) +{ + HDRStageDataUnrecPtr pData = pAction->getData(_iDataSlotId); + + if(pData == NULL) + { + initData(pAction, iVPWidth, iVPHeight); + } + else if((pData->getWidth () != iVPWidth ) || + (pData->getHeight() != iVPHeight) ) + { + resizeStageData(pData, + iVPWidth, + iVPHeight); + + pData->setWidth (iVPWidth ); + pData->setHeight(iVPHeight); + } +} + #define OSGHDRL << std::endl SimpleSHLChunkTransitPtr HDRStage::generateHDRFragmentProgram(void) diff --git a/Source/System/NodeCores/Groups/Effects/HDR/OSGHDRStage.h b/Source/System/NodeCores/Groups/Effects/HDR/OSGHDRStage.h index bc1a22504..407d1dbba 100644 --- a/Source/System/NodeCores/Groups/Effects/HDR/OSGHDRStage.h +++ b/Source/System/NodeCores/Groups/Effects/HDR/OSGHDRStage.h @@ -88,7 +88,13 @@ class OSG_EFFECTGROUPS_DLLMAPPING HDRStage : public HDRStageBase /*! \name Dump */ /*! \{ */ - void initData(RenderAction *pAction); + void initData (RenderAction *pAction, + Int32 iVPWidth, + Int32 iVPHeight); + + void updateData(RenderAction *pAction, + Int32 iVPWidth, + Int32 iVPHeight); /*! \} */ /*---------------------------------------------------------------------*/ diff --git a/Source/System/NodeCores/Groups/Effects/HDR/testHDRStage.cpp b/Source/System/NodeCores/Groups/Effects/HDR/testHDRStage.cpp index 0af15017c..27e8022cb 100644 --- a/Source/System/NodeCores/Groups/Effects/HDR/testHDRStage.cpp +++ b/Source/System/NodeCores/Groups/Effects/HDR/testHDRStage.cpp @@ -556,8 +556,10 @@ int doMain (int argc, char **argv) OSG::TextureObjChunkUnrecPtr pBackTex = OSG::TextureObjChunk::create(); - pBackTex->setImage(pBackImg); - pBackTex->setInternalFormat(GL_RGB32F_ARB); + pBackTex->setImage (pBackImg ); + pBackTex->setInternalFormat(GL_RGB32F_ARB ); + pBackTex->setWrapS (GL_CLAMP_TO_EDGE); + pBackTex->setWrapT (GL_CLAMP_TO_EDGE); bkgnd->setBackTexture (pBackTex); bkgnd->setFrontTexture (pBackTex); diff --git a/Source/System/State/Base/OSGStateOverride.cpp b/Source/System/State/Base/OSGStateOverride.cpp index 49e710402..9518f67d2 100644 --- a/Source/System/State/Base/OSGStateOverride.cpp +++ b/Source/System/State/Base/OSGStateOverride.cpp @@ -47,6 +47,7 @@ #ifdef OSG_NEW_SHADER #include "OSGShaderProgramChunk.h" #include "OSGShaderProgramVariableChunk.h" +#include "OSGSimpleSHLChunk.h" #endif OSG_USING_NAMESPACE @@ -195,6 +196,90 @@ void StateOverride::addOverride(UInt32 uiSlot, _pShaderVar = NULL; } +void StateOverride::addOverride(UInt32 uiSlot, + SimpleSHLChunk *pChunk) +{ +#ifdef OSG_NEW_SHADER + insertOverride(uiSlot, pChunk); +#endif +} + +void StateOverride::insertOverride(UInt32 uiSlot, + StateChunk *pChunk) +{ + ChunkElement newElem(uiSlot, pChunk); + + ChunkStoreIt cIt = std::lower_bound(_vChunks.begin(), + _vChunks.end (), + newElem ); + + if(cIt == _vChunks.end()) + { + _vChunks.insert(cIt, newElem); + } + else + { + if(cIt->first == uiSlot) + { + cIt->second = pChunk; + } + else + { + _vChunks.insert(cIt, newElem); + } + } + + if(pChunk == NULL) + { + return; + } + + UInt32 uiKey1 = _uiKeyGen & Key1Mask; + UInt32 uiKey2 = (_uiKeyGen & Key2Mask) >> 10; + UInt32 uiKey3 = (_uiKeyGen & Key3Mask) >> 20; + + if(uiKey1 != InvalidKey && uiKey1 == uiSlot) + { + uiKey1 = + (pChunk->getIgnore() == false) ? pChunk->getChunkId() : 0; + + _uiKeyMask &= ~Key1Mask; + } + else + { + uiKey1 = 0; + } + + if(uiKey2 != InvalidKey && uiKey2 == uiSlot) + { + uiKey2 = + (pChunk->getIgnore() == false) ? pChunk->getChunkId() : 0; + + _uiKeyMask &= ~Key2Mask; + } + else + { + uiKey2 = 0; + } + + if(uiKey3 != InvalidKey && uiKey3 == uiSlot) + { + uiKey3 = + (pChunk->getIgnore() == false) ? pChunk->getChunkId() : 0; + + _uiKeyMask &= ~Key3Mask; + } + else + { + uiKey3 = 0; + } + + _uiSortKey = + (uiKey1 & Key1Mask) | + ((uiKey2 & Key1Mask) << 10) | + ((uiKey3 & Key1Mask) << 20); +} + void StateOverride::addOverride(UInt32 uiSlot, StateChunk *pChunk) { #ifdef OSG_NEW_SHADER @@ -208,77 +293,7 @@ void StateOverride::addOverride(UInt32 uiSlot, StateChunk *pChunk) if(pSPVChunk == NULL) { #endif - ChunkElement newElem(uiSlot, pChunk); - - ChunkStoreIt cIt = std::lower_bound(_vChunks.begin(), - _vChunks.end (), - newElem ); - - if(cIt == _vChunks.end()) - { - _vChunks.insert(cIt, newElem); - } - else - { - if(cIt->first == uiSlot) - { - cIt->second = pChunk; - } - else - { - _vChunks.insert(cIt, newElem); - } - } - - if(pChunk == NULL) - { - return; - } - - UInt32 uiKey1 = _uiKeyGen & Key1Mask; - UInt32 uiKey2 = (_uiKeyGen & Key2Mask) >> 10; - UInt32 uiKey3 = (_uiKeyGen & Key3Mask) >> 20; - - if(uiKey1 != InvalidKey && uiKey1 == uiSlot) - { - uiKey1 = - (pChunk->getIgnore() == false) ? pChunk->getChunkId() : 0; - - _uiKeyMask &= ~Key1Mask; - } - else - { - uiKey1 = 0; - } - - if(uiKey2 != InvalidKey && uiKey2 == uiSlot) - { - uiKey2 = - (pChunk->getIgnore() == false) ? pChunk->getChunkId() : 0; - - _uiKeyMask &= ~Key2Mask; - } - else - { - uiKey2 = 0; - } - - if(uiKey3 != InvalidKey && uiKey3 == uiSlot) - { - uiKey3 = - (pChunk->getIgnore() == false) ? pChunk->getChunkId() : 0; - - _uiKeyMask &= ~Key3Mask; - } - else - { - uiKey3 = 0; - } - - _uiSortKey = - (uiKey1 & Key1Mask) | - ((uiKey2 & Key1Mask) << 10) | - ((uiKey3 & Key1Mask) << 20); + insertOverride(uiSlot, pChunk); #ifdef OSG_NEW_SHADER } else diff --git a/Source/System/State/Base/OSGStateOverride.h b/Source/System/State/Base/OSGStateOverride.h index 93813f100..8db876034 100644 --- a/Source/System/State/Base/OSGStateOverride.h +++ b/Source/System/State/Base/OSGStateOverride.h @@ -59,6 +59,7 @@ class ShaderExecutableVarChunk; class ShaderProgramChunk; class ShaderProgramVariableChunk; class ShaderProgram; +class SimpleSHLChunk; /*! \ingroup GrpSystemStateBase \ingroup GrpLibOSGSystem @@ -140,6 +141,8 @@ class OSG_SYSTEM_DLLMAPPING StateOverride void addOverride (UInt32 uiSlot, StateChunk *pChunk); + void addOverride (UInt32 uiSlot, + SimpleSHLChunk *pChunk); void addOverride (UInt32 uiSlot, ShaderProgramChunk *pChunk); void addOverride (UInt32 uiSlot, @@ -203,6 +206,14 @@ class OSG_SYSTEM_DLLMAPPING StateOverride void rebuildSortKey(void); + /*! \} */ + /*---------------------------------------------------------------------*/ + /*! \name Access */ + /*! \{ */ + + void insertOverride(UInt32 uiSlot, + StateChunk *pChunk); + /*! \} */ /*========================== PRIVATE ================================*/ diff --git a/Source/System/State/Shader/SHL/OSGSimpleSHLChunk.cpp b/Source/System/State/Shader/SHL/OSGSimpleSHLChunk.cpp index 8baf4d969..d53c606a3 100644 --- a/Source/System/State/Shader/SHL/OSGSimpleSHLChunk.cpp +++ b/Source/System/State/Shader/SHL/OSGSimpleSHLChunk.cpp @@ -633,7 +633,7 @@ void SimpleSHLChunk::changeFrom(DrawEnv *pEnv, UInt32 uiDep = ShaderProcVariable::SHDObject; - if(uiProgId != pEnv->getActiveShader()) + if(uiProgId != pEnv->getActiveShader() || uiProgId == 0) { FragmentShaderIt fIt = _mfFragmentShader.begin(); FragmentShaderIt fEnd = _mfFragmentShader.end (); diff --git a/Source/System/State/Shader/SHL/OSGSimpleSHLFunctions.cpp b/Source/System/State/Shader/SHL/OSGSimpleSHLFunctions.cpp index 633a0e5c8..82de2cebe 100644 --- a/Source/System/State/Shader/SHL/OSGSimpleSHLFunctions.cpp +++ b/Source/System/State/Shader/SHL/OSGSimpleSHLFunctions.cpp @@ -85,14 +85,12 @@ void generateGaussianWeights(Real32 fBlurWidth, } } -SimpleSHLChunkTransitPtr generate1DConvolutionFilterFP(Real32 fBlurWidth, - bool vertical, - bool tex2D, - Int32 imgWidth, - Int32 imgHeight) +std::string generate1DConvolutionFilterFPString(Real32 fBlurWidth, + bool vertical, + bool tex2D, + Int32 imgWidth, + Int32 imgHeight) { - SimpleSHLChunkTransitPtr returnValue = SimpleSHLChunk::create(); - int width; std::vector weights; @@ -170,11 +168,29 @@ SimpleSHLChunkTransitPtr generate1DConvolutionFilterFP(Real32 fBlurWidth, << " gl_FragColor = sum;\n" << "}\n"; - returnValue->setFragmentProgram(ost.str()); - delete [] weights2; delete [] offsets; + return ost.str(); +} + +SimpleSHLChunkTransitPtr generate1DConvolutionFilterFP(Real32 fBlurWidth, + bool vertical, + bool tex2D, + Int32 imgWidth, + Int32 imgHeight) +{ + SimpleSHLChunkTransitPtr returnValue = SimpleSHLChunk::create(); + + std::string szFragProg = generate1DConvolutionFilterFPString(fBlurWidth, + vertical, + tex2D, + imgWidth, + imgHeight ); + + + returnValue->setFragmentProgram(szFragProg); + return returnValue; } diff --git a/Source/System/State/Shader/SHL/OSGSimpleSHLFunctions.h b/Source/System/State/Shader/SHL/OSGSimpleSHLFunctions.h index 56cbfd352..32226a632 100644 --- a/Source/System/State/Shader/SHL/OSGSimpleSHLFunctions.h +++ b/Source/System/State/Shader/SHL/OSGSimpleSHLFunctions.h @@ -48,6 +48,13 @@ OSG_BEGIN_NAMESPACE /*! \ingroup GrpSystemShaderSHLFuncs */ OSG_SYSTEM_DLLMAPPING +std::string generate1DConvolutionFilterFPString(Real32 fBlurWidth, + bool vertical, + bool tex2D, + Int32 imgWidth, + Int32 imgHeight); + +OSG_SYSTEM_DLLMAPPING SimpleSHLChunkTransitPtr generate1DConvolutionFilterFP(Real32 fBlurWidth, bool vertical, bool tex2D, diff --git a/Source/System/Window/FrameBufferObjects/OSGFrameBufferAttachment.h b/Source/System/Window/FrameBufferObjects/OSGFrameBufferAttachment.h index c7a9dd0b7..ecd109867 100644 --- a/Source/System/Window/FrameBufferObjects/OSGFrameBufferAttachment.h +++ b/Source/System/Window/FrameBufferObjects/OSGFrameBufferAttachment.h @@ -126,7 +126,8 @@ class OSG_SYSTEM_DLLMAPPING FrameBufferAttachment : /*! \name size */ /*! \{ */ - void resize(UInt32 uiWidth, UInt32 uiHeight); + void resize (UInt32 uiWidth, UInt32 uiHeight); + virtual void resizeBuffers(UInt32 uiWidth, UInt32 uiHeight) = 0; /*! \} */ /*---------------------------------------------------------------------*/ diff --git a/Source/System/Window/FrameBufferObjects/OSGFrameBufferObject.cpp b/Source/System/Window/FrameBufferObjects/OSGFrameBufferObject.cpp index c29c50ba0..ba0a588a3 100644 --- a/Source/System/Window/FrameBufferObjects/OSGFrameBufferObject.cpp +++ b/Source/System/Window/FrameBufferObjects/OSGFrameBufferObject.cpp @@ -158,6 +158,36 @@ void FrameBufferObject::setSize(UInt32 uiWidth, UInt32 uiHeight) setHeight(uiHeight); } +void FrameBufferObject::resizeAll(UInt32 uiWidth, UInt32 uiHeight) +{ + MFUnrecFrameBufferAttachmentPtr::const_iterator attIt = + _mfColorAttachments.begin(); + MFUnrecFrameBufferAttachmentPtr::const_iterator attEnd = + _mfColorAttachments.end (); + + for(; attIt != attEnd; ++attIt) + { + if(*attIt == NULL) + continue; + + (*attIt)->resizeBuffers(uiWidth, uiHeight); + } + + if(_sfDepthAttachment.getValue() != NULL) + { + _sfDepthAttachment.getValue()->resizeBuffers(uiWidth, uiHeight); + } + + if(_sfStencilAttachment.getValue() != NULL) + { + _sfStencilAttachment.getValue()->resizeBuffers(uiWidth, uiHeight); + } + + this->setSize(uiWidth, uiHeight); + + Window::refreshGLObject(getGLId()); +} + /*----------------------- constructors & destructors ----------------------*/ FrameBufferObject::FrameBufferObject(void) : diff --git a/Source/System/Window/FrameBufferObjects/OSGFrameBufferObject.h b/Source/System/Window/FrameBufferObjects/OSGFrameBufferObject.h index ab80ba617..81217a417 100644 --- a/Source/System/Window/FrameBufferObjects/OSGFrameBufferObject.h +++ b/Source/System/Window/FrameBufferObjects/OSGFrameBufferObject.h @@ -82,7 +82,9 @@ class OSG_SYSTEM_DLLMAPPING FrameBufferObject : /*! \name Sync */ /*! \{ */ - void setSize(UInt32 uiWidth, UInt32 uiHeight); + void setSize (UInt32 uiWidth, UInt32 uiHeight); + + void resizeAll(UInt32 uiWidth, UInt32 uiHeight); /*! \} */ /*---------------------------------------------------------------------*/ diff --git a/Source/System/Window/FrameBufferObjects/OSGRenderBuffer.cpp b/Source/System/Window/FrameBufferObjects/OSGRenderBuffer.cpp index a920b8751..f6027d60c 100644 --- a/Source/System/Window/FrameBufferObjects/OSGRenderBuffer.cpp +++ b/Source/System/Window/FrameBufferObjects/OSGRenderBuffer.cpp @@ -193,6 +193,13 @@ void RenderBuffer::dump( UInt32 , SLOG << "Dump RenderBuffer NI" << std::endl; } +void RenderBuffer::resizeBuffers(UInt32 uiWidth, UInt32 uiHeight) +{ + Inherited::resize(uiWidth, uiHeight); + + Window::reinitializeGLObject(getGLId()); +} + UInt32 RenderBuffer::handleGL(DrawEnv *pEnv, UInt32 osgid, Window::GLObjectStatusE mode, diff --git a/Source/System/Window/FrameBufferObjects/OSGRenderBuffer.h b/Source/System/Window/FrameBufferObjects/OSGRenderBuffer.h index 3010006ef..fb8ab55d4 100644 --- a/Source/System/Window/FrameBufferObjects/OSGRenderBuffer.h +++ b/Source/System/Window/FrameBufferObjects/OSGRenderBuffer.h @@ -87,6 +87,13 @@ class OSG_SYSTEM_DLLMAPPING RenderBuffer : /*! \name your_category */ /*! \{ */ + virtual void resizeBuffers(UInt32 uiWidth, UInt32 uiHeight); + + /*! \} */ + /*---------------------------------------------------------------------*/ + /*! \name your_category */ + /*! \{ */ + virtual void bind (DrawEnv *pEnv, UInt32 index = 0); virtual void validate(DrawEnv *pEnv ); diff --git a/Source/System/Window/FrameBufferObjects/OSGTextureBuffer.cpp b/Source/System/Window/FrameBufferObjects/OSGTextureBuffer.cpp index 5209ba81c..777efacb7 100644 --- a/Source/System/Window/FrameBufferObjects/OSGTextureBuffer.cpp +++ b/Source/System/Window/FrameBufferObjects/OSGTextureBuffer.cpp @@ -161,6 +161,31 @@ void TextureBuffer::validate(DrawEnv *pEnv) } } +void TextureBuffer::resizeBuffers(UInt32 uiWidth, UInt32 uiHeight) +{ + TextureObjChunk *pTex = this->getTexture(); + + if(pTex == NULL) + return; + + Image *pImg = pTex->getImage(); + + if(pImg == NULL) + return; + + pImg->set(pImg->getPixelFormat(), //Image::OSG_RGB_PF, + uiWidth, + uiHeight, + pImg->getDepth (), + pImg->getMipMapCount(), + pImg->getFrameCount (), + pImg->getFrameDelay (), + NULL, + pImg->getDataType (), //Image::OSG_UINT8_IMAGEDATA, + false, + pImg->getSideCount ()); +} + void TextureBuffer::processPreDeactivate(DrawEnv *pEnv, UInt32 index) { if(_sfReadBack.getValue() == true) diff --git a/Source/System/Window/FrameBufferObjects/OSGTextureBuffer.h b/Source/System/Window/FrameBufferObjects/OSGTextureBuffer.h index b848fcee6..05f7dc9f1 100644 --- a/Source/System/Window/FrameBufferObjects/OSGTextureBuffer.h +++ b/Source/System/Window/FrameBufferObjects/OSGTextureBuffer.h @@ -95,6 +95,13 @@ class OSG_SYSTEM_DLLMAPPING TextureBuffer : /*! \name your_category */ /*! \{ */ + virtual void resizeBuffers(UInt32 uiWidth, UInt32 uiHeight); + + /*! \} */ + /*---------------------------------------------------------------------*/ + /*! \name your_category */ + /*! \{ */ + virtual void processPreDeactivate (DrawEnv *pEnv, UInt32 index); virtual void processPostDeactivate(DrawEnv *pEnv);