25 ClassImp(TEveFrameBoxGL);
30 void TEveFrameBoxGL::RenderFrame(
const TEveFrameBox& b, Bool_t fillp)
32 const Float_t * p = b.fFramePoints;
35 if (b.fFrameType == TEveFrameBox::kFT_Quad)
39 TMath::Normal2Plane(p, p+3, p+6, normal);
45 glBegin(GL_LINE_LOOP);
47 Int_t nPoints = b.fFrameSize / 3;
48 for (Int_t i = 0; i < nPoints; ++i, p += 3)
52 else if (b.fFrameType == TEveFrameBox::kFT_Box)
57 TMath::Normal2Plane(p, p+3, p+6, normal);
59 glVertex3fv(p); glVertex3fv(p + 3);
60 glVertex3fv(p + 6); glVertex3fv(p + 9);
62 TMath::Normal2Plane(p+21, p+18, p+15, normal);
64 glVertex3fv(p + 21); glVertex3fv(p + 18);
65 glVertex3fv(p + 15); glVertex3fv(p + 12);
67 TMath::Normal2Plane(p, p+12, p+15, normal);
69 glVertex3fv(p); glVertex3fv(p + 12);
70 glVertex3fv(p + 15); glVertex3fv(p + 3);
72 TMath::Normal2Plane(p+9, p+6, p+18, normal);
74 glVertex3fv(p + 9); glVertex3fv(p + 6);
75 glVertex3fv(p + 18); glVertex3fv(p + 21);
77 TMath::Normal2Plane(p, p+9, p+21, normal);
79 glVertex3fv(p); glVertex3fv(p + 9);
80 glVertex3fv(p + 21); glVertex3fv(p + 12);
82 TMath::Normal2Plane(p+3, p+15, p+18, normal);
84 glVertex3fv(p + 3); glVertex3fv(p + 15);
85 glVertex3fv(p + 18); glVertex3fv(p + 6);
90 glBegin(GL_LINE_STRIP);
91 glVertex3fv(p); glVertex3fv(p + 3);
92 glVertex3fv(p + 6); glVertex3fv(p + 9);
94 glVertex3fv(p + 12); glVertex3fv(p + 15);
95 glVertex3fv(p + 18); glVertex3fv(p + 21);
99 glVertex3fv(p + 3); glVertex3fv(p + 15);
100 glVertex3fv(p + 6); glVertex3fv(p + 18);
101 glVertex3fv(p + 9); glVertex3fv(p + 21);
110 void TEveFrameBoxGL::Render(
const TEveFrameBox* box)
112 const TEveFrameBox& b = *box;
114 glPushAttrib(GL_POLYGON_BIT | GL_LINE_BIT | GL_ENABLE_BIT);
116 glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
117 glEnable(GL_COLOR_MATERIAL);
118 glDisable(GL_CULL_FACE);
123 glGetBooleanv(GL_LIGHT_MODEL_TWO_SIDE, &lmts);
124 if (!lmts) glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
126 glEnable(GL_POLYGON_OFFSET_FILL);
127 glPolygonOffset(2, 2);
128 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
130 if (b.fBackRGBA[3] < 255)
133 glDepthMask(GL_FALSE);
136 TGLUtil::Color4ubv(b.fBackRGBA);
137 RenderFrame(b, kTRUE);
139 if (!lmts) glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
142 glDisable(GL_LIGHTING);
143 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
145 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
146 glEnable(GL_LINE_SMOOTH);
148 TGLUtil::LineWidth(b.fFrameWidth);
149 TGLUtil::Color4ubv(b.fFrameRGBA);
150 RenderFrame(b, b.fFrameFill);