// $Header$ #include "TriangleSetGL.h" #include "TriangleSet.h" #include #include #ifdef WIN32 #include "Windows4root.h" #endif #include //______________________________________________________________________ // TriangleSetGL // using namespace Reve; ClassImp(TriangleSetGL) TriangleSetGL::TriangleSetGL() : TGLObject(), fM(0) { // fCached = false; // Disable display list. } TriangleSetGL::~TriangleSetGL() {} /**************************************************************************/ Bool_t TriangleSetGL::SetModel(TObject* obj) { if(SetModelCheckClass(obj, TriangleSet::Class())) { fM = dynamic_cast(obj); return kTRUE; } return kFALSE; } void TriangleSetGL::SetBBox() { // !! This ok if master sub-classed from TAttBBox SetAxisAlignedBBox(((TriangleSet*)fExternalObj)->AssertBBox()); } /**************************************************************************/ void TriangleSetGL::DirectDraw(const TGLDrawFlags& /*flags*/) const { TriangleSet& TS = *fM; Bool_t isScaled = TS.fHMTrans.IsScale(); GLint ex_shade_model; glGetIntegerv(GL_SHADE_MODEL, &ex_shade_model); glShadeModel(GL_FLAT); glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glPolygonMode(GL_FRONT, GL_FILL); glPolygonMode(GL_BACK, GL_LINE); glDisable(GL_CULL_FACE); if (isScaled) glEnable(GL_NORMALIZE); glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); glVertexPointer(3, GL_FLOAT, 0, TS.fVerts); glEnableClientState(GL_VERTEX_ARRAY); Int_t* T = TS.fTrings; Float_t* N = TS.fTringNorms; UChar_t* C = TS.fTringCols; TVector3 e1, e2, n; glBegin(GL_TRIANGLES); for(Int_t t=0; t