mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-31 17:26:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef OPENMW_COMPONENTS_FX_PASS_H
 | |
| #define OPENMW_COMPONENTS_FX_PASS_H
 | |
| 
 | |
| #include <array>
 | |
| #include <string>
 | |
| #include <sstream>
 | |
| #include <cstdint>
 | |
| #include <unordered_set>
 | |
| #include <optional>
 | |
| 
 | |
| #include <osg/Timer>
 | |
| #include <osg/Program>
 | |
| #include <osg/Shader>
 | |
| #include <osg/State>
 | |
| #include <osg/Texture2D>
 | |
| #include <osg/BlendEquation>
 | |
| #include <osg/BlendFunc>
 | |
| 
 | |
| namespace fx
 | |
| {
 | |
|     class Technique;
 | |
| 
 | |
|     class Pass
 | |
|     {
 | |
|     public:
 | |
| 
 | |
|         enum class Order
 | |
|         {
 | |
|             Forward,
 | |
|             Post
 | |
|         };
 | |
| 
 | |
|         enum class Type
 | |
|         {
 | |
|             None,
 | |
|             Pixel,
 | |
|             Compute
 | |
|         };
 | |
| 
 | |
|         friend class Technique;
 | |
| 
 | |
|         Pass(Type type=Type::Pixel, Order order=Order::Post, bool ubo = false);
 | |
| 
 | |
|         void compile(Technique& technique, std::string_view preamble);
 | |
| 
 | |
|         std::string getTarget() const { return mTarget; }
 | |
| 
 | |
|         const std::array<std::string, 3>& getRenderTargets() const { return mRenderTargets; }
 | |
| 
 | |
|         void prepareStateSet(osg::StateSet* stateSet, const std::string& name) const;
 | |
| 
 | |
|         std::string getName() const { return mName; }
 | |
| 
 | |
|         void dirty();
 | |
| 
 | |
|     private:
 | |
|         std::string getPassHeader(Technique& technique, std::string_view preamble, bool fragOut = false);
 | |
| 
 | |
|         bool mCompiled;
 | |
| 
 | |
|         osg::ref_ptr<osg::Shader> mVertex;
 | |
|         osg::ref_ptr<osg::Shader> mFragment;
 | |
|         osg::ref_ptr<osg::Shader> mCompute;
 | |
| 
 | |
|         Type mType;
 | |
|         Order mOrder;
 | |
|         std::string mName;
 | |
|         bool mLegacyGLSL;
 | |
|         bool mUBO;
 | |
| 
 | |
|         std::array<std::string, 3> mRenderTargets;
 | |
| 
 | |
|         std::string mTarget;
 | |
|         std::optional<osg::Vec4f> mClearColor;
 | |
| 
 | |
|         std::optional<osg::BlendFunc::BlendFuncMode> mBlendSource;
 | |
|         std::optional<osg::BlendFunc::BlendFuncMode> mBlendDest;
 | |
|         std::optional<osg::BlendEquation::Equation> mBlendEq;
 | |
|     };
 | |
| }
 | |
| 
 | |
| #endif
 |