Commit | Line | Data |
---|---|---|
b311480e | 1 | // Created on: 2011-07-13 |
2 | // Created by: Sergey ZERCHANINOV | |
3 | // Copyright (c) 2011-2012 OPEN CASCADE SAS | |
4 | // | |
5 | // The content of this file is subject to the Open CASCADE Technology Public | |
6 | // License Version 6.5 (the "License"). You may not use the content of this file | |
7 | // except in compliance with the License. Please obtain a copy of the License | |
8 | // at http://www.opencascade.org and read it completely before using this file. | |
9 | // | |
10 | // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its | |
11 | // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. | |
12 | // | |
13 | // The Original Code and all software distributed under the License is | |
14 | // distributed on an "AS IS" basis, without warranty of any kind, and the | |
15 | // Initial Developer hereby disclaims all such warranties, including without | |
16 | // limitation, any warranties of merchantability, fitness for a particular | |
17 | // purpose or non-infringement. Please see the License for the specific terms | |
18 | // and conditions governing the rights and limitations under the License. | |
19 | ||
2166f0fa SK |
20 | #ifndef _OpenGl_AspectLine_Header |
21 | #define _OpenGl_AspectLine_Header | |
22 | ||
30f0ad28 | 23 | #include <TCollection_AsciiString.hxx> |
24 | ||
bf75be98 | 25 | #include <InterfaceGraphic_Graphic3d.hxx> |
2166f0fa SK |
26 | #include <Aspect_TypeOfLine.hxx> |
27 | ||
30f0ad28 | 28 | #include <Handle_OpenGl_ShaderProgram.hxx> |
29 | ||
2166f0fa SK |
30 | #include <OpenGl_Element.hxx> |
31 | ||
32 | class OpenGl_AspectLine : public OpenGl_Element | |
33 | { | |
34 | public: | |
35 | ||
36 | OpenGl_AspectLine (); | |
37 | OpenGl_AspectLine (const OpenGl_AspectLine &AnOther); | |
2166f0fa | 38 | |
fd4a6963 | 39 | void SetAspect (const CALL_DEF_CONTEXTLINE &theAspect); |
2166f0fa SK |
40 | |
41 | const TEL_COLOUR & Color() const { return myColor; } | |
42 | Aspect_TypeOfLine Type() const { return myType; } | |
43 | float Width() const { return myWidth; } | |
44 | ||
30f0ad28 | 45 | //! Init and return OpenGl shader program resource. |
46 | //! @return shader program resource. | |
47 | const Handle(OpenGl_ShaderProgram)& ShaderProgramRes (const Handle(OpenGl_Workspace)& theWorkspace) const | |
48 | { | |
49 | if (!myResources.IsShaderReady()) | |
50 | { | |
51 | myResources.BuildShader (theWorkspace, myShaderProgram); | |
52 | myResources.SetShaderReady(); | |
53 | } | |
54 | ||
55 | return myResources.ShaderProgram; | |
56 | } | |
57 | ||
5e27df78 | 58 | virtual void Render (const Handle(OpenGl_Workspace)& theWorkspace) const; |
59 | virtual void Release (const Handle(OpenGl_Context)& theContext); | |
2166f0fa | 60 | |
30f0ad28 | 61 | protected: |
62 | ||
63 | TEL_COLOUR myColor; | |
64 | Aspect_TypeOfLine myType; | |
65 | float myWidth; | |
66 | Handle(Graphic3d_ShaderProgram) myShaderProgram; | |
67 | ||
68 | protected: | |
69 | ||
70 | //! OpenGl resources | |
71 | mutable struct Resources | |
72 | { | |
73 | public: | |
74 | Resources() : myIsShaderReady (Standard_False) {} | |
75 | ||
76 | Standard_Boolean IsShaderReady() const { return myIsShaderReady; } | |
f85399e5 | 77 | void SetShaderReady() { myIsShaderReady = Standard_True; } |
78 | void ResetShaderReadiness() { myIsShaderReady = Standard_False; } | |
30f0ad28 | 79 | |
80 | void BuildShader (const Handle(OpenGl_Workspace)& theWS, const Handle(Graphic3d_ShaderProgram)& theShader); | |
81 | ||
82 | Handle(OpenGl_ShaderProgram) ShaderProgram; | |
83 | TCollection_AsciiString ShaderProgramId; | |
84 | ||
85 | private: | |
86 | ||
87 | Standard_Boolean myIsShaderReady; | |
2166f0fa | 88 | |
30f0ad28 | 89 | } myResources; |
2166f0fa SK |
90 | |
91 | public: | |
1c35b92f | 92 | DEFINE_STANDARD_ALLOC |
2166f0fa SK |
93 | }; |
94 | ||
95 | #endif //_OpenGl_AspectLine_Header |