File indexing completed on 2026-09-15 09:16:46
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #ifndef OpenGl_ShaderStates_HeaderFile
0017 #define OpenGl_ShaderStates_HeaderFile
0018
0019 #include <Graphic3d_RenderTransparentMethod.hxx>
0020 #include <Graphic3d_LightSet.hxx>
0021 #include <OpenGl_Element.hxx>
0022 #include <OpenGl_Vec.hxx>
0023
0024 class OpenGl_ShadowMapArray;
0025
0026
0027 class OpenGl_StateInterface
0028 {
0029 public:
0030
0031 Standard_EXPORT OpenGl_StateInterface();
0032
0033
0034 size_t Index() const { return myIndex; }
0035
0036
0037 void Update() { ++myIndex; }
0038
0039 protected:
0040 size_t myIndex;
0041 };
0042
0043
0044 class OpenGl_ProjectionState : public OpenGl_StateInterface
0045 {
0046 public:
0047
0048 Standard_EXPORT OpenGl_ProjectionState();
0049
0050
0051 Standard_EXPORT void Set(const NCollection_Mat4<float>& theProjectionMatrix);
0052
0053
0054 const NCollection_Mat4<float>& ProjectionMatrix() const { return myProjectionMatrix; }
0055
0056
0057 Standard_EXPORT const NCollection_Mat4<float>& ProjectionMatrixInverse() const;
0058
0059 private:
0060 NCollection_Mat4<float> myProjectionMatrix;
0061 mutable NCollection_Mat4<float> myProjectionMatrixInverse;
0062 mutable bool myInverseNeedUpdate;
0063 };
0064
0065
0066 class OpenGl_ModelWorldState : public OpenGl_StateInterface
0067 {
0068 public:
0069
0070 Standard_EXPORT OpenGl_ModelWorldState();
0071
0072
0073 Standard_EXPORT void Set(const NCollection_Mat4<float>& theModelWorldMatrix);
0074
0075
0076 const NCollection_Mat4<float>& ModelWorldMatrix() const { return myModelWorldMatrix; }
0077
0078
0079 Standard_EXPORT const NCollection_Mat4<float>& ModelWorldMatrixInverse() const;
0080
0081 private:
0082 NCollection_Mat4<float> myModelWorldMatrix;
0083 mutable NCollection_Mat4<float> myModelWorldMatrixInverse;
0084 mutable bool myInverseNeedUpdate;
0085 };
0086
0087
0088 class OpenGl_WorldViewState : public OpenGl_StateInterface
0089 {
0090 public:
0091
0092 Standard_EXPORT OpenGl_WorldViewState();
0093
0094
0095 Standard_EXPORT void Set(const NCollection_Mat4<float>& theWorldViewMatrix);
0096
0097
0098 const NCollection_Mat4<float>& WorldViewMatrix() const { return myWorldViewMatrix; }
0099
0100
0101 Standard_EXPORT const NCollection_Mat4<float>& WorldViewMatrixInverse() const;
0102
0103 private:
0104 NCollection_Mat4<float> myWorldViewMatrix;
0105 mutable NCollection_Mat4<float> myWorldViewMatrixInverse;
0106 mutable bool myInverseNeedUpdate;
0107 };
0108
0109
0110 class OpenGl_LightSourceState : public OpenGl_StateInterface
0111 {
0112 public:
0113
0114 OpenGl_LightSourceState()
0115 : mySpecIBLMapLevels(0),
0116 myToCastShadows(true)
0117 {
0118 }
0119
0120
0121 void Set(const occ::handle<Graphic3d_LightSet>& theLightSources)
0122 {
0123 myLightSources = theLightSources;
0124 }
0125
0126
0127 const occ::handle<Graphic3d_LightSet>& LightSources() const { return myLightSources; }
0128
0129
0130
0131 int SpecIBLMapLevels() const { return mySpecIBLMapLevels; }
0132
0133
0134 void SetSpecIBLMapLevels(int theSpecIBLMapLevels) { mySpecIBLMapLevels = theSpecIBLMapLevels; }
0135
0136
0137 bool HasShadowMaps() const { return myToCastShadows && !myShadowMaps.IsNull(); }
0138
0139
0140 const occ::handle<OpenGl_ShadowMapArray>& ShadowMaps() const { return myShadowMaps; }
0141
0142
0143 void SetShadowMaps(const occ::handle<OpenGl_ShadowMapArray>& theMap) { myShadowMaps = theMap; }
0144
0145
0146 bool ToCastShadows() const { return myToCastShadows; }
0147
0148
0149 void SetCastShadows(bool theToCast) { myToCastShadows = theToCast; }
0150
0151 private:
0152 occ::handle<Graphic3d_LightSet> myLightSources;
0153
0154 int mySpecIBLMapLevels;
0155
0156 occ::handle<OpenGl_ShadowMapArray> myShadowMaps;
0157 bool myToCastShadows;
0158 };
0159
0160
0161 class OpenGl_ClippingState
0162 {
0163 public:
0164
0165 Standard_EXPORT OpenGl_ClippingState();
0166
0167
0168 size_t Index() const { return myIndex; }
0169
0170
0171 Standard_EXPORT void Update();
0172
0173
0174 Standard_EXPORT void Revert();
0175
0176 protected:
0177 size_t myIndex;
0178 size_t myNextIndex;
0179 NCollection_List<size_t> myStateStack;
0180 };
0181
0182
0183 class OpenGl_OitState : public OpenGl_StateInterface
0184 {
0185 public:
0186
0187 OpenGl_OitState()
0188 : myOitMode(Graphic3d_RTM_BLEND_UNORDERED),
0189 myDepthFactor(0.5f)
0190 {
0191 }
0192
0193
0194
0195
0196
0197
0198 void Set(Graphic3d_RenderTransparentMethod theMode, const float theDepthFactor)
0199 {
0200 myOitMode = theMode;
0201 myDepthFactor = static_cast<float>((std::max)(0.f, (std::min)(1.f, theDepthFactor)));
0202 }
0203
0204
0205
0206 Graphic3d_RenderTransparentMethod ActiveMode() const { return myOitMode; }
0207
0208
0209
0210 float DepthFactor() const { return myDepthFactor; }
0211
0212 private:
0213
0214 Graphic3d_RenderTransparentMethod myOitMode;
0215
0216 float myDepthFactor;
0217 };
0218
0219 #endif