// @(#)root/eve:$Id$ // Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007 /************************************************************************* * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #include "TEveTriangleSetGL.h" #include "TEveTriangleSet.h" #include "TVector3.h" #include "TGLIncludes.h" /** \class TEveTriangleSetGL \ingroup TEve GL-renderer for TEveTriangleSet class. See also: TGLObject, TGLLogicalShape. */ ClassImp(TEveTriangleSetGL); //////////////////////////////////////////////////////////////////////////////// /// Constructor. TEveTriangleSetGL::TEveTriangleSetGL() : TGLObject(), fM(0) { // fDLCache = false; // Disable display list. fMultiColor = kTRUE; } //////////////////////////////////////////////////////////////////////////////// /// Destructor. TEveTriangleSetGL::~TEveTriangleSetGL() { } //////////////////////////////////////////////////////////////////////////////// /// Set model object. Bool_t TEveTriangleSetGL::SetModel(TObject* obj, const Option_t* /*opt*/) { fM = SetModelDynCast(obj); return kTRUE; } //////////////////////////////////////////////////////////////////////////////// /// Set bounding-box from the model. void TEveTriangleSetGL::SetBBox() { // !! This ok if master sub-classed from TAttBBox SetAxisAlignedBBox(((TEveTriangleSet*)fExternalObj)->AssertBBox()); } //////////////////////////////////////////////////////////////////////////////// /// Low-level GL rendering. void TEveTriangleSetGL::DirectDraw(TGLRnrCtx & /*rnrCtx*/) const { TEveTriangleSet& refTS = *fM; Bool_t isScaled = refTS.RefMainTrans().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); glDisable(GL_CULL_FACE); if (isScaled) glEnable(GL_NORMALIZE); glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); glVertexPointer(3, GL_FLOAT, 0, refTS.fVerts); glEnableClientState(GL_VERTEX_ARRAY); Int_t* tng = refTS.fTrings; Float_t* nrm = refTS.fTringNorms; UChar_t* col = refTS.fTringCols; TVector3 e1, e2, n; glBegin(GL_TRIANGLES); for(Int_t t=0; t