// @(#)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" //============================================================================== // TEveTriangleSetGL //============================================================================== //______________________________________________________________________________ // // GL-renderer for TEveTriangleSet class. // // See also: TGLObject, TGLLogicalShape. ClassImp(TEveTriangleSetGL); //______________________________________________________________________________ TEveTriangleSetGL::TEveTriangleSetGL() : TGLObject(), fM(0) { // Constructor. // fDLCache = false; // Disable display list. fMultiColor = kTRUE; } //______________________________________________________________________________ TEveTriangleSetGL::~TEveTriangleSetGL() { // Destructor. } /******************************************************************************/ //______________________________________________________________________________ Bool_t TEveTriangleSetGL::SetModel(TObject* obj, const Option_t* /*opt*/) { // Set model object. fM = SetModelDynCast(obj); return kTRUE; } //______________________________________________________________________________ void TEveTriangleSetGL::SetBBox() { // Set bounding-box from the model. // !! This ok if master sub-classed from TAttBBox SetAxisAlignedBBox(((TEveTriangleSet*)fExternalObj)->AssertBBox()); } /******************************************************************************/ //______________________________________________________________________________ void TEveTriangleSetGL::DirectDraw(TGLRnrCtx & /*rnrCtx*/) const { // Low-level GL rendering. 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