3 #include "FrameBoxGL.h"
4 #include <Reve/FrameBox.h>
6 #include <TGLIncludes.h>
12 //______________________________________________________________________
15 // A class encapsulating GL rendering of Reve::FrameBox via a static
20 void FrameBoxGL::RenderFrame(const FrameBox& b, Bool_t fillp)
22 const Float_t* p = b.fFramePoints;
24 if (b.fFrameType == FrameBox::FT_Quad)
26 glBegin(fillp ? GL_POLYGON : GL_LINE_LOOP);
27 glVertex3fv(p); glVertex3fv(p + 3);
28 glVertex3fv(p + 6); glVertex3fv(p + 9);
31 else if (b.fFrameType == FrameBox::FT_Box)
33 // !!! frame-fill not implemented for 3D frame.
34 glBegin(GL_LINE_STRIP);
35 glVertex3fv(p); glVertex3fv(p + 3);
36 glVertex3fv(p + 6); glVertex3fv(p + 9);
38 glVertex3fv(p + 12); glVertex3fv(p + 15);
39 glVertex3fv(p + 18); glVertex3fv(p + 21);
43 glVertex3fv(p + 3); glVertex3fv(p + 15);
44 glVertex3fv(p + 6); glVertex3fv(p + 18);
45 glVertex3fv(p + 9); glVertex3fv(p + 21);
50 void FrameBoxGL::Render(const FrameBox* box)
52 const FrameBox& b = *box;
54 glPushAttrib(GL_POLYGON_BIT | GL_LINE_BIT | GL_ENABLE_BIT);
56 glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
57 glEnable(GL_COLOR_MATERIAL);
58 glDisable(GL_CULL_FACE);
60 if (b.fFrameType == FrameBox::FT_Quad && b.fDrawBack)
63 glGetBooleanv(GL_LIGHT_MODEL_TWO_SIDE, &lmts);
64 if (!lmts) glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE);
66 glEnable(GL_POLYGON_OFFSET_FILL);
67 glPolygonOffset(2, 2);
68 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
70 const Float_t* p = b.fFramePoints;
72 TMath::Normal2Plane(p, p+3, p+6, normal);
75 glColor4ubv(b.fBackRGBA);
76 RenderFrame(b, kTRUE);
78 if (!lmts) glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
81 glDisable(GL_LIGHTING);
82 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
84 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
85 glEnable(GL_LINE_SMOOTH);
87 glLineWidth(b.fFrameWidth);
88 glColor4ubv(b.fFrameRGBA);
89 RenderFrame(b, b.fFrameFill);