0022819: Redesign of OpenGl driver
[occt.git] / src / OpenGl / OpenGl_GraphicDriver_8.cxx
1 // File:      OpenGl_GraphicDriver_8.cxx
2 // Created:   20 October 2011
3 // Author:    Sergey ZERCHANINOV
4 // Copyright: OPEN CASCADE 2011
5
6 #include <OpenGl_GraphicDriver.hxx>
7
8 #include <OpenGl_CView.hxx>
9 #include <OpenGl_Structure.hxx>
10
11 static Handle(OpenGl_Workspace) myImmediateWS;
12
13 /*----------------------------------------------------------------------*/
14
15 Standard_Boolean OpenGl_GraphicDriver::BeginAddMode (const Graphic3d_CView& ACView)
16 {
17   if (ACView.ViewId == -1)
18     return Standard_False;
19
20   const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
21   if (aCView && aCView->WS->BeginAddMode())
22   {
23     myImmediateWS = aCView->WS;
24     return Standard_True;
25   }
26
27   return Standard_False;
28 }
29
30 void OpenGl_GraphicDriver::EndAddMode (void)
31 {
32   if (!myImmediateWS.IsNull())
33   {
34     myImmediateWS->EndAddMode();
35     myImmediateWS.Nullify();
36   }
37 }
38
39 Standard_Boolean OpenGl_GraphicDriver::BeginImmediatMode (const Graphic3d_CView& ACView, const Aspect_CLayer2d& ACUnderLayer, const Aspect_CLayer2d& ACOverLayer, const Standard_Boolean DoubleBuffer, const Standard_Boolean RetainMode)
40 {
41   if (ACView.ViewId == -1)
42     return Standard_False;
43
44   const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
45   if (aCView && aCView->WS->BeginImmediatMode(ACView, DoubleBuffer, RetainMode))
46   {
47     myImmediateWS = aCView->WS;
48     return Standard_True;
49   }
50
51   return Standard_False;
52 }
53
54 void OpenGl_GraphicDriver::BeginPolyline ()
55 {
56   if (!myImmediateWS.IsNull())
57     myImmediateWS->BeginPolyline();
58 }
59
60 void OpenGl_GraphicDriver::ClearImmediatMode (const Graphic3d_CView& ACView, const Standard_Boolean aFlush)
61 {
62   const OpenGl_CView *aCView = (const OpenGl_CView *)ACView.ptrView;
63   if (aCView)
64     aCView->WS->ClearImmediatMode(ACView,aFlush);
65 }
66
67 void OpenGl_GraphicDriver::Draw (const Standard_ShortReal X, const Standard_ShortReal Y, const Standard_ShortReal Z)
68 {
69   if (!myImmediateWS.IsNull())
70     myImmediateWS->Draw(X,Y,Z);
71 }
72
73 void OpenGl_GraphicDriver::DrawStructure (const Graphic3d_CStructure& ACStructure)
74 {
75   OpenGl_Structure *astructure = (OpenGl_Structure *)ACStructure.ptrStructure;
76   if (!astructure)
77     return;
78
79   if (!myImmediateWS.IsNull())
80     myImmediateWS->DrawStructure(astructure);
81 }
82
83 void OpenGl_GraphicDriver::EndImmediatMode (const Standard_Integer Synchronize)
84 {
85   if (!myImmediateWS.IsNull())
86   {
87     myImmediateWS->EndImmediatMode();
88     myImmediateWS.Nullify();
89   }
90 }
91
92 void OpenGl_GraphicDriver::EndPolyline ()
93 {
94   if (!myImmediateWS.IsNull())
95     myImmediateWS->EndPolyline();
96 }
97
98 void OpenGl_GraphicDriver::Move (const Standard_ShortReal X, const Standard_ShortReal Y, const Standard_ShortReal Z)
99 {
100   if (!myImmediateWS.IsNull())
101     myImmediateWS->Move(X,Y,Z);
102 }
103
104 void OpenGl_GraphicDriver::SetLineColor (const Standard_ShortReal R, const Standard_ShortReal G, const Standard_ShortReal B)
105 {
106   if (!myImmediateWS.IsNull())
107     myImmediateWS->SetLineColor(R,G,B);
108 }
109
110 void OpenGl_GraphicDriver::SetLineType (const Standard_Integer Type)
111 {
112   if (!myImmediateWS.IsNull())
113     myImmediateWS->SetLineType(Type);
114 }
115
116 void OpenGl_GraphicDriver::SetLineWidth (const Standard_ShortReal Width)
117 {
118   if (!myImmediateWS.IsNull())
119     myImmediateWS->SetLineWidth(Width);
120 }
121
122 void OpenGl_GraphicDriver::SetMinMax (const Standard_ShortReal X1, const Standard_ShortReal Y1, const Standard_ShortReal Z1, const Standard_ShortReal X2, const Standard_ShortReal Y2, const Standard_ShortReal Z2)
123 {
124   if (!myImmediateWS.IsNull())
125     myImmediateWS->SetMinMax(X1,Y1,Z1,X2,Y2,Z2);
126 }
127
128 void OpenGl_GraphicDriver::Transform (const TColStd_Array2OfReal& AMatrix, const Graphic3d_TypeOfComposition AType)
129 {
130   if (!myImmediateWS.IsNull())
131     myImmediateWS->Transform(AMatrix,AType);
132 }