#include "cvfBase.h" #include "cvfObject.h" #include "cvfColor4.h" #include "cvfString.h" #include "cafEffectGenerator.h" #include "cvfRendering.h" namespace cvf { class Rendering; class Scene; class Camera; class RenderSequence; class FramebufferObject; class UniformInt; class UniformFloat; class Effect; class RenderStateBlending; class RenderStateDepth; class ShaderProgram; } namespace caf { class TransparentWBRenderConfiguration : public cvf::Object { public: TransparentWBRenderConfiguration(); virtual ~TransparentWBRenderConfiguration(); void resize(int width, int height); void prepareForRendering(); // UpdateCameras and scene ... void setUpRenderSequence(cvf::RenderSequence* renderSeq); //cvf::ref transparentPartEffect(const cvf::Color4f& color); //void setupTransparentPartEffect(cvf::Effect* effectToModify, ShaderProgramGenerator& shaderGen); cvf::ref overlayRendering(); private: //void initShaders(); static void copyCameraView(cvf::Camera* srcCamera, cvf::Camera* dstCamera); friend class RenderPassPreparator; void updateEffectsForRendering(cvf::Rendering *rendering); cvf::ref m_opaceRendering; cvf::ref m_transparentRendering; cvf::ref m_combinationRendering; cvf::ref m_opaceRenderingFbo; cvf::ref m_transparencyFbo; #if 0 cvf::ref m_renderPassUniform; cvf::ref m_blending; cvf::ref m_depth; cvf::ref m_shaderForTransparentParts; cvf::ref m_simpleSolidShader; cvf::ref m_partlyTranspPartShader; #endif cvf::String m_finalFragShaderCode; }; //================================================================================================== // // SurfaceEffectGenerator // //================================================================================================== class WBTransparencySurfaceEffectGenerator : public EffectGenerator { public: WBTransparencySurfaceEffectGenerator(const cvf::Color4f& color, caf::PolygonOffset polygonOffset, bool useSpecular); ~WBTransparencySurfaceEffectGenerator(); protected: virtual bool isEqual(const EffectGenerator* other) const; virtual EffectGenerator* copy() const; virtual void updateForShaderBasedRendering(cvf::Effect* effect) const; virtual void updateForFixedFunctionRendering(cvf::Effect* effect) const; private: void updateCommonEffect(cvf::Effect* effect) const; static void initStaticData(); private: cvf::Color4f m_color; caf::PolygonOffset m_polygonOffset; bool m_useSpecularColor; friend class TransparentWBRenderConfiguration; static cvf::ref m_shaderForTransparentParts; static cvf::ref m_shaderForTransparentPartsSpec; static cvf::ref m_shaderForOpaqueParts; static cvf::ref m_shaderForOpaquePartsSpec; static cvf::ref m_renderPassUniform; static cvf::ref m_blending; static cvf::ref m_oGL11Blending; static cvf::ref m_cameraNearUniform; static cvf::ref m_cameraFarUniform; static cvf::ref m_depth; }; }