mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0024192: Adding support for shaders to OCCT visualization toolkit
This commit is contained in:
169
src/OpenGl/OpenGl_ShaderManager.hxx
Normal file
169
src/OpenGl/OpenGl_ShaderManager.hxx
Normal file
@@ -0,0 +1,169 @@
|
||||
// Created on: 2013-09-26
|
||||
// Created by: Denis BOGOLEPOV
|
||||
// Copyright (c) 2013 OPEN CASCADE SAS
|
||||
//
|
||||
// The content of this file is subject to the Open CASCADE Technology Public
|
||||
// License Version 6.5 (the "License"). You may not use the content of this file
|
||||
// except in compliance with the License. Please obtain a copy of the License
|
||||
// at http://www.opencascade.org and read it completely before using this file.
|
||||
//
|
||||
// The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
|
||||
// main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
|
||||
//
|
||||
// The Original Code and all software distributed under the License is
|
||||
// distributed on an "AS IS" basis, without warranty of any kind, and the
|
||||
// Initial Developer hereby disclaims all such warranties, including without
|
||||
// limitation, any warranties of merchantability, fitness for a particular
|
||||
// purpose or non-infringement. Please see the License for the specific terms
|
||||
// and conditions governing the rights and limitations under the License.
|
||||
|
||||
#ifndef _OpenGl_ShaderManager_HeaderFile
|
||||
#define _OpenGl_ShaderManager_HeaderFile
|
||||
|
||||
#include <Graphic3d_ShaderProgram_Handle.hxx>
|
||||
|
||||
#include <NCollection_DataMap.hxx>
|
||||
#include <NCollection_Sequence.hxx>
|
||||
|
||||
#include <Handle_OpenGl_ShaderManager.hxx>
|
||||
#include <OpenGl_ShaderProgram.hxx>
|
||||
#include <OpenGl_ShaderStates.hxx>
|
||||
|
||||
//! List of shader programs.
|
||||
typedef NCollection_Sequence<Handle(OpenGl_ShaderProgram)> OpenGl_ShaderProgramList;
|
||||
|
||||
//! Map to declare per-program states of OCCT materials.
|
||||
typedef NCollection_DataMap<Handle(OpenGl_ShaderProgram), OpenGl_MaterialState> OpenGl_MaterialStates;
|
||||
|
||||
//! This class is responsible for managing shader programs.
|
||||
class OpenGl_ShaderManager : public Standard_Transient
|
||||
{
|
||||
friend class OpenGl_ShaderProgram;
|
||||
|
||||
public:
|
||||
|
||||
//! Creates new empty shader manager.
|
||||
Standard_EXPORT OpenGl_ShaderManager (OpenGl_Context* theContext);
|
||||
|
||||
//! Releases resources of shader manager.
|
||||
Standard_EXPORT virtual ~OpenGl_ShaderManager();
|
||||
|
||||
//! Creates new shader program.
|
||||
Standard_EXPORT Handle(OpenGl_ShaderProgram) Create (const Handle(Graphic3d_ShaderProgram)& theProxyProgram = NULL);
|
||||
|
||||
//! Unregisters specified shader program.
|
||||
Standard_EXPORT void Unregister (Handle(OpenGl_ShaderProgram)& theProgram);
|
||||
|
||||
//! Returns list of registered shader programs.
|
||||
Standard_EXPORT const OpenGl_ShaderProgramList& ShaderPrograms() const;
|
||||
|
||||
//! Returns true if no program objects are registered in the manager.
|
||||
Standard_EXPORT Standard_Boolean IsEmpty() const;
|
||||
|
||||
DEFINE_STANDARD_RTTI (OpenGl_ShaderManager)
|
||||
|
||||
protected:
|
||||
|
||||
OpenGl_MaterialStates myMaterialStates; //!< Per-program state of OCCT material
|
||||
OpenGl_ProjectionState myProjectionState; //!< State of OCCT projection transformation
|
||||
OpenGl_ModelWorldState myModelWorldState; //!< State of OCCT model-world transformation
|
||||
OpenGl_WorldViewState myWorldViewState; //!< State of OCCT world-view transformation
|
||||
OpenGl_LightSourceState myClippingState; //!< State of OCCT clipping planes
|
||||
OpenGl_LightSourceState myLightSourceState; //!< State of OCCT light sources
|
||||
|
||||
public:
|
||||
|
||||
//! Returns current state of OCCT light sources.
|
||||
Standard_EXPORT const OpenGl_LightSourceState& LightSourceState() const;
|
||||
|
||||
//! Updates state of OCCT light sources.
|
||||
Standard_EXPORT void UpdateLightSourceStateTo (const OpenGl_ListOfLight* theLights);
|
||||
|
||||
//! Pushes current state of OCCT light sources to specified program.
|
||||
Standard_EXPORT void PushLightSourceState (const Handle(OpenGl_ShaderProgram)& theProgram) const;
|
||||
|
||||
public:
|
||||
|
||||
//! Returns current state of OCCT projection transform.
|
||||
Standard_EXPORT const OpenGl_ProjectionState& ProjectionState() const;
|
||||
|
||||
//! Updates state of OCCT projection transform.
|
||||
Standard_EXPORT void UpdateProjectionStateTo (const Tmatrix3& theProjectionMatrix);
|
||||
|
||||
//! Reverts state of OCCT projection transform.
|
||||
Standard_EXPORT void RevertProjectionStateTo (const Tmatrix3& theProjectionMatrix);
|
||||
|
||||
//! Pushes current state of OCCT projection transform to specified program.
|
||||
Standard_EXPORT void PushProjectionState (const Handle(OpenGl_ShaderProgram)& theProgram) const;
|
||||
|
||||
public:
|
||||
|
||||
//! Returns current state of OCCT model-world transform.
|
||||
Standard_EXPORT const OpenGl_ModelWorldState& ModelWorldState() const;
|
||||
|
||||
//! Updates state of OCCT model-world transform.
|
||||
Standard_EXPORT void UpdateModelWorldStateTo (const Tmatrix3& theModelWorldMatrix);
|
||||
|
||||
//! Reverts state of OCCT model-world transform.
|
||||
Standard_EXPORT void RevertModelWorldStateTo (const Tmatrix3& theModelWorldMatrix);
|
||||
|
||||
//! Pushes current state of OCCT model-world transform to specified program.
|
||||
Standard_EXPORT void PushModelWorldState (const Handle(OpenGl_ShaderProgram)& theProgram) const;
|
||||
|
||||
public:
|
||||
|
||||
//! Returns current state of OCCT world-view transform.
|
||||
Standard_EXPORT const OpenGl_WorldViewState& WorldViewState() const;
|
||||
|
||||
//! Updates state of OCCT world-view transform.
|
||||
Standard_EXPORT void UpdateWorldViewStateTo (const Tmatrix3& theWorldViewMatrix);
|
||||
|
||||
//! Reverts state of OCCT world-view transform.
|
||||
Standard_EXPORT void RevertWorldViewStateTo (const Tmatrix3& theWorldViewMatrix);
|
||||
|
||||
//! Pushes current state of OCCT world-view transform to specified program.
|
||||
Standard_EXPORT void PushWorldViewState (const Handle(OpenGl_ShaderProgram)& theProgram) const;
|
||||
|
||||
public:
|
||||
|
||||
//! Updates state of OCCT clipping planes.
|
||||
Standard_EXPORT void UpdateClippingState();
|
||||
|
||||
//! Reverts state of OCCT clipping planes.
|
||||
Standard_EXPORT void RevertClippingState();
|
||||
|
||||
//! Pushes current state of OCCT clipping planes to specified program.
|
||||
Standard_EXPORT void PushClippingState (const Handle(OpenGl_ShaderProgram)& theProgram) const;
|
||||
|
||||
public:
|
||||
|
||||
//! Resets state of OCCT material for all programs.
|
||||
Standard_EXPORT void ResetMaterialStates();
|
||||
|
||||
//! Updates state of OCCT material for specified program.
|
||||
Standard_EXPORT void UpdateMaterialStateTo (const Handle(OpenGl_ShaderProgram)& theProgram,
|
||||
const OpenGl_Element* theAspect);
|
||||
|
||||
//! Pushes current state of OCCT material to specified program.
|
||||
Standard_EXPORT void PushMaterialState (const Handle(OpenGl_ShaderProgram)& theProgram) const;
|
||||
|
||||
//! Returns current state of OCCT material for specified program.
|
||||
Standard_EXPORT const OpenGl_MaterialState* MaterialState (const Handle(OpenGl_ShaderProgram)& theProgram) const;
|
||||
|
||||
public:
|
||||
|
||||
//! Pushes current state of OCCT graphics parameters to specified program.
|
||||
Standard_EXPORT void PushState (const Handle(OpenGl_ShaderProgram)& theProgram) const;
|
||||
|
||||
protected:
|
||||
|
||||
OpenGl_ShaderProgramList myProgramList; //!< The list of shader programs
|
||||
OpenGl_Context* myContext; //!< The OpenGL context
|
||||
|
||||
private:
|
||||
|
||||
Standard_Boolean myIsPP; //!< Is any program object bound (programmable pipeline)?
|
||||
|
||||
};
|
||||
|
||||
#endif // _OpenGl_ShaderManager_HeaderFile
|
Reference in New Issue
Block a user