-// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023 CEA, EDF, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <vtkRenderWindow.h>
#include <vtkCommand.h>
#include <vtkCellData.h>
+#include <vtkUnsignedCharArray.h>
+#include <vtkIdTypeArray.h>
+
+#include <Basics_Utils.hxx>
#ifndef WIN32
# ifndef GLX_GLXEXT_LEGACY
# define GLX_GLXEXT_LEGACY
# endif
+#ifdef __APPLE__
+#import <mach-o/dyld.h>
+#import <stdlib.h>
+#import <string.h>
+void * glXGetProcAddressARB (const GLubyte *name)
+
+{
+ NSSymbol symbol;
+ char *symbolName;
+ symbolName = (char *)malloc (strlen ((const char *)name) + 2); // 1
+ strcpy(symbolName + 1, (const char *)name); // 2
+ symbolName[0] = '_'; // 3
+ symbol = NULL;
+ if (NSIsSymbolNameDefined (symbolName)) // 4
+ symbol = NSLookupAndBindSymbol (symbolName);
+ free (symbolName); // 5
+ return symbol ? NSAddressOfSymbol (symbol) : NULL; // 6
+}
+#else
# include <GL/glx.h>
+#endif
# include <dlfcn.h>
#else
# include <wingdi.h>
#endif
#ifndef VTK_IMPLEMENT_MESA_CXX
-vtkStandardNewMacro(VTKViewer_PolyDataMapper);
+vtkStandardNewMacro(VTKViewer_PolyDataMapper)
#endif
// some definitions for what the polydata has in it
#define BallTextureId 0
+
+void MessageCallback( GLenum /*source*/,
+ GLenum type,
+ GLuint /*id*/,
+ GLenum severity,
+ GLsizei /*length*/,
+ const GLcharARB* message,
+ const void* /*userParam*/ )
+{
+ fprintf( stderr, "GL CALLBACK: %s type = 0x%x, severity = 0x%x, message = %s\n",
+ ( type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : "" ),
+ type, severity, message );
+}
+
+
//-----------------------------------------------------------------------------
VTKViewer_PolyDataMapper::VTKViewer_PolyDataMapper()
{
#endif
this->OpenGLHelper.Init();
+
+ // For debug purposes only
+ // glEnable ( GL_DEBUG_OUTPUT );
+ // glDebugMessageCallback( (GLDEBUGPROC) MessageCallback, 0 );
+
}
//-----------------------------------------------------------------------------
int VTKViewer_PolyDataMapper::InitShader()
{
#ifdef VTK_OPENGL2
+#if defined(WIN32) && defined(UNICODE)
+ std::wstring wFilePath = std::wstring(_wgetenv(L"GUI_ROOT_DIR")) + L"/share/salome/resources/gui/Point";
+ std::string filePath = Kernel_Utils::utf8_encode_s(wFilePath.c_str());
+#else
std::string filePath = std::string( getenv( "GUI_ROOT_DIR") ) + "/share/salome/resources/gui/Point";
+#endif
if( !this->OpenGLHelper.CreateShaderProgram(filePath, this->PointProgram, this->VertexShader, this->FragmentShader) )
return false;
// Get uniform locations.
+ GLint current_program;
+ glGetIntegerv( GL_CURRENT_PROGRAM, ¤t_program );
this->OpenGLHelper.vglUseProgramObjectARB( this->PointProgram );
this->myLocations.ModelViewProjection = this->OpenGLHelper.vglGetUniformLocationARB( this->PointProgram, "uModelViewProjectionMatrix" );
this->myLocations.GeneralPointSize = this->OpenGLHelper.vglGetUniformLocationARB( this->PointProgram, "uGeneralPointSize" );
this->myLocations.PointSprite = this->OpenGLHelper.vglGetUniformLocationARB( this->PointProgram, "uPointSprite" );
- this->OpenGLHelper.vglUseProgramObjectARB( 0 );
+ this->OpenGLHelper.vglUseProgramObjectARB( current_program );
this->OpenGLHelper.vglGenVertexArraysARB(1, &this->VertexArrayObject);
+#else
+#if defined(WIN32) && defined(UNICODE)
+ std::wstring wFilePath = std::wstring(_wgetenv( L"GUI_ROOT_DIR" ) ) + L"/share/salome/resources/gui/Vertex_Program_ARB.txt";
+ std::string fileName = Kernel_Utils::utf8_encode( wFilePath.c_str() );
#else
std::string fileName = std::string( getenv( "GUI_ROOT_DIR") ) +
"/share/salome/resources/gui/Vertex_Program_ARB.txt";
+#endif
char* shader = GUI_OPENGL::readFromFile( fileName );
QString anAlphaTexture = getenv( "GUI_ROOT_DIR" );
anAlphaTexture.append( "/share/salome/resources/gui/sprite_alpha.vti" );
- vtkSmartPointer<vtkImageData> aTextureValue = VTK::MakeTexture( aMainTexture.toLatin1().constData(), anAlphaTexture.toLatin1().constData() );
+ vtkSmartPointer<vtkImageData> aTextureValue = VTK::MakeTexture( aMainTexture.toUtf8().constData(), anAlphaTexture.toUtf8().constData() );
this->SpecialTextures[BallTextureId] = aTextureValue;
}
this->ImageData = this->SpecialTextures[BallTextureId];
glGetIntegerv(GL_NUM_EXTENSIONS, &n);
for (int i = 0; i < n; i++)
{
- const char *exti = (const char *)glGetStringi(GL_EXTENSIONS, i);
+ const char *exti = (const char *)this->OpenGLHelper.vglGetStringiARB(GL_EXTENSIONS, i);
strm<< exti <<" ";
}
std::string s = strm.str();
glGenTextures( 1, &this->PointSpriteTexture );
}
#ifdef VTK_OPENGL2
- glActiveTexture( GL_TEXTURE0 );
+ this->OpenGLHelper.vglActiveTextureARB( GL_TEXTURE0 );
#endif
glBindTexture( GL_TEXTURE_2D, this->PointSpriteTexture );
glTexEnvf( GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE );
// make sure our window is current
ren->GetRenderWindow()->MakeCurrent();
-
+ GLint current_program;
+ glGetIntegerv( GL_CURRENT_PROGRAM, ¤t_program );
this->OpenGLHelper.vglUseProgramObjectARB( this->PointProgram );
#ifndef VTK_OPENGL2
// this->RenderEdges(ren,act);
//this->RenderPieceFinish(ren, act);
#endif
- this->OpenGLHelper.vglUseProgramObjectARB( 0 );
+ this->OpenGLHelper.vglUseProgramObjectARB( current_program );
this->CleanupPointSprites();
glBindTexture( GL_TEXTURE_2D, 0 );
}
virtual
void
- get( TVertex& theVertex, vtkIdType thePointId, vtkIdType theCellId )
+ get( TVertex& theVertex, vtkIdType /*thePointId*/, vtkIdType /*theCellId*/ )
{
theVertex.r = myColor[0];
theVertex.g = myColor[1];
virtual
vtkIdType
- GetTupleId( vtkIdType thePointId, vtkIdType theCellId )
+ GetTupleId( vtkIdType thePointId, vtkIdType /*theCellId*/ )
{
return thePointId;
}
virtual
vtkIdType
- GetTupleId( vtkIdType thePointId, vtkIdType theCellId )
+ GetTupleId( vtkIdType /*thePointId*/, vtkIdType theCellId )
{
return theCellId;
}
vtkDataArray* theDiamArray,
double theBallScale )
{
- vtkIdType* ptIds = theCells->GetPointer();
+ vtkIdType* ptIds = theCells->GetData()->GetPointer(0);
vtkIdType* endPtIds = ptIds + theCells->GetNumberOfConnectivityEntries();
bool mapBalls = false;
#else
//-----------------------------------------------------------------------------
void VTKViewer_PolyDataMapper::RenderPieceDraw( vtkRenderer* ren, vtkActor* act ) {
- int noAbort = 1;
if( (!this->MarkerEnabled || this->MarkerType == VTK::MT_NONE || !this->ImageData.GetPointer()) && !this->BallEnabled) {
MAPPER_SUPERCLASS::RenderPieceDraw( ren, act );
return;
if( this->ExtensionsInitialized == ES_Ok ) {
#ifdef VTK_OPENGL2
+ GLint current_program;
+ glGetIntegerv( GL_CURRENT_PROGRAM, ¤t_program );
this->OpenGLHelper.vglUseProgramObjectARB( this->PointProgram );
vtkOpenGLCamera *cam = (vtkOpenGLCamera *)(ren->GetActiveCamera());
this->OpenGLHelper.vglDeleteBuffersARB( 1, &aBufferObjectID );
this->OpenGLHelper.vglBindVertexArrayARB( 0 );
- this->OpenGLHelper.vglUseProgramObjectARB( 0 );
+ this->OpenGLHelper.vglUseProgramObjectARB( current_program );
#else
GLuint aBufferObjectID, aDiamsID = 0;
GLint attribute_diams = -1;