-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#include "VTKViewer.h"
#include "VTKViewer_MarkerDef.h"
-#ifdef WNT
+#ifdef WIN32
#include <windows.h>
#endif
#define MAPPER_SUPERCLASS vtkMesaPolyDataMapper
#endif
+#ifndef GL_ARB_shader_objects
+typedef GLuint GLhandleARB;
+#endif
+
+
//----------------------------------------------------------------------------
//! OpenGL Point Sprites PolyData Mapper.
/*!
//! Set point marker enabled
void SetMarkerEnabled( bool );
+ //! Set point ball enabled
+ void SetBallEnabled( bool );
+
+ bool GetBallEnabled( );
+
+ //! Set ball scale factor
+ void SetBallScale( double );
+
+ double GetBallScale( );
+
//! Set standard point marker
void SetMarkerStd( VTK::MarkerType, VTK::MarkerScale );
//! Implement superclass render method.
virtual void RenderPiece( vtkRenderer*, vtkActor* );
-
//! Draw method for OpenGL.
+#ifndef VTK_OPENGL2
virtual int Draw( vtkRenderer*, vtkActor* );
+#else
+ virtual void RenderPieceDraw( vtkRenderer*, vtkActor* );
+#endif
protected:
VTKViewer_PolyDataMapper();
//! Initializing textures for Point Sprites.
void InitTextures();
+ //! Initializing of the Vertex Shader.
+ int InitShader();
+
+ void InternalDraw(vtkRenderer*, vtkActor*);
+
private:
int ExtensionsInitialized;
vtkSmartPointer<vtkImageData> ImageData;
+ GLhandleARB PointProgram;
+#ifdef VTK_OPENGL2
+ GLhandleARB VertexShader;
+ GLhandleARB FragmentShader;
+ GLuint VertexArrayObject;
+#endif
+
+ struct Locations {
+ static const GLint INVALID_LOCATION = -1;
+
+ GLint ModelViewProjection;
+ GLint GeneralPointSize;
+ GLint PointSprite;
+
+ Locations()
+ : ModelViewProjection (INVALID_LOCATION),
+ GeneralPointSize (INVALID_LOCATION),
+ PointSprite (INVALID_LOCATION)
+ {
+ //
+ }
+ } myLocations;
+
bool MarkerEnabled;
+ bool BallEnabled;
+ double BallScale;
VTK::MarkerType MarkerType;
VTK::MarkerScale MarkerScale;
int MarkerId;
typedef std::map< int, vtkSmartPointer<vtkImageData> > ImageDataMap;
ImageDataMap StandardTextures;
ImageDataMap CustomTextures;
+ ImageDataMap SpecialTextures; //special predefined textures, used to draw point sprites.
};
#endif