Merge pull request #5336 from maxGimeno/GraphicsView-Use_opengl_4_1_context-maxGImeno

Graphics_view: Upgrade glsl version in basic_viewer_shaders
This commit is contained in:
Laurent Rineau 2021-02-05 16:12:42 +01:00
commit c5ba414c72
36 changed files with 216 additions and 137 deletions

View File

@ -19,18 +19,16 @@
#include <QApplication> #include <QApplication>
#include <CGAL/Qt/resources.h> #include <CGAL/Qt/resources.h>
#include <QMimeData> #include <QMimeData>
#include <CGAL/Qt/init_ogl_context.h>
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
CGAL::Qt::init_ogl_context(4,3);
QApplication app(argc, argv); QApplication app(argc, argv);
app.setOrganizationDomain("inria.fr"); app.setOrganizationDomain("inria.fr");
app.setOrganizationName("INRIA"); app.setOrganizationName("INRIA");
app.setApplicationName("AABB tree demo"); app.setApplicationName("AABB tree demo");
//for windows
#if (QT_VERSION >= QT_VERSION_CHECK(5, 3, 0))
app.setAttribute(Qt::AA_UseDesktopOpenGL);
#endif
// Import resources from libCGALQt (Qt5). // Import resources from libCGALQt (Qt5).
CGAL_QT_INIT_RESOURCES; CGAL_QT_INIT_RESOURCES;

View File

@ -45,6 +45,7 @@ MainWindow::MainWindow(QWidget* parent)
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
m_pViewer->makeCurrent();
delete ui; delete ui;
} }

View File

@ -91,8 +91,8 @@ void Scene::compile_shaders()
//Vertex source code //Vertex source code
const char vertex_source[] = const char vertex_source[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"uniform highp mat4 f_matrix;\n" "uniform highp mat4 f_matrix;\n"
"void main(void)\n" "void main(void)\n"
@ -103,10 +103,11 @@ void Scene::compile_shaders()
//Vertex source code //Vertex source code
const char fragment_source[] = const char fragment_source[] =
{ {
"#version 120 \n" "#version 150 \n"
"uniform highp vec4 color; \n" "uniform highp vec4 color; \n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
"gl_FragColor = color; \n" "out_color = color; \n"
"} \n" "} \n"
"\n" "\n"
}; };
@ -139,26 +140,27 @@ void Scene::compile_shaders()
//Vertex source code //Vertex source code
const char tex_vertex_source[] = const char tex_vertex_source[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"attribute highp vec2 tex_coord; \n" "in highp vec2 tex_coord; \n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"uniform highp mat4 f_matrix;\n" "uniform highp mat4 f_matrix;\n"
"varying highp vec2 texc;\n" "out highp vec2 texc;\n"
"void main(void)\n" "void main(void)\n"
"{\n" "{\n"
" gl_Position = mvp_matrix * f_matrix * vertex;\n" " gl_Position = mvp_matrix * f_matrix * vertex;\n"
" texc = tex_coord;\n" " texc = tex_coord;\n"
"}" "}"
}; };
//Vertex source code //Vertex source code
const char tex_fragment_source[] = const char tex_fragment_source[] =
{ {
"#version 120 \n" "#version 150 \n"
"uniform sampler2D texture;\n" "uniform sampler2D s_texture;\n"
"varying highp vec2 texc;\n" "in highp vec2 texc;\n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
"gl_FragColor = texture2D(texture, texc.st);\n" "out_color = vec4(texture(s_texture, texc));\n"
"} \n" "} \n"
"\n" "\n"
}; };
@ -1319,12 +1321,8 @@ void Scene::deactivate_cutting_plane()
} }
void Scene::initGL() void Scene::initGL()
{ {
gl = new QOpenGLFunctions_2_1(); gl = new QOpenGLFunctions();
if(!gl->initializeOpenGLFunctions()) gl->initializeOpenGLFunctions();
{
qFatal("ERROR : OpenGL Functions not initialized. Check your OpenGL Verison (should be >=3.3)");
exit(1);
}
gl->glGenTextures(1, &textureId); gl->glGenTextures(1, &textureId);
compile_shaders(); compile_shaders();

View File

@ -86,7 +86,7 @@ public:
private: private:
// member data // member data
QOpenGLFunctions_2_1 *gl; QOpenGLFunctions *gl;
Bbox m_bbox; Bbox m_bbox;
Polyhedron *m_pPolyhedron; Polyhedron *m_pPolyhedron;
std::list<Point> m_points; std::list<Point> m_points;

View File

@ -5,18 +5,16 @@
#include <CGAL/Qt/resources.h> #include <CGAL/Qt/resources.h>
#include <CGAL/Qt/init_ogl_context.h>
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
QApplication application(argc,argv); CGAL::Qt::init_ogl_context(4,3);
QApplication application(argc,argv);
application.setOrganizationDomain("geometryfactory.com"); application.setOrganizationDomain("geometryfactory.com");
application.setOrganizationName("GeometryFactory"); application.setOrganizationName("GeometryFactory");
application.setApplicationName("Alpha Shape Reconstruction"); application.setApplicationName("Alpha Shape Reconstruction");
//for Windows
#if (QT_VERSION >= QT_VERSION_CHECK(5, 3, 0))
application.setAttribute(Qt::AA_UseDesktopOpenGL);
#endif
// Import resources from libCGALQt (Qt5). // Import resources from libCGALQt (Qt5).
// See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE

View File

@ -29,14 +29,14 @@ void Viewer::compile_shaders()
//Vertex source code //Vertex source code
const char vertex_source[] = const char vertex_source[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"attribute highp vec3 normal;\n" "in highp vec3 normal;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"uniform highp mat4 mv_matrix; \n" "uniform highp mat4 mv_matrix; \n"
"varying highp vec4 fP; \n" "out highp vec4 fP; \n"
"varying highp vec3 fN; \n" "out highp vec3 fN; \n"
"void main(void)\n" "void main(void)\n"
"{\n" "{\n"
" fP = mv_matrix * vertex; \n" " fP = mv_matrix * vertex; \n"
@ -47,15 +47,16 @@ void Viewer::compile_shaders()
//Fragment source code //Fragment source code
const char fragment_source[] = const char fragment_source[] =
{ {
"#version 120 \n" "#version 150 \n"
"varying highp vec4 fP; \n" "in highp vec4 fP; \n"
"varying highp vec3 fN; \n" "in highp vec3 fN; \n"
"uniform highp vec4 color; \n" "uniform highp vec4 color; \n"
"uniform highp vec4 light_pos; \n" "uniform highp vec4 light_pos; \n"
"uniform highp vec4 light_diff; \n" "uniform highp vec4 light_diff; \n"
"uniform highp vec4 light_spec; \n" "uniform highp vec4 light_spec; \n"
"uniform highp vec4 light_amb; \n" "uniform highp vec4 light_amb; \n"
"uniform float spec_power ; \n" "uniform float spec_power ; \n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
@ -70,7 +71,7 @@ void Viewer::compile_shaders()
" highp vec4 diffuse = abs(dot(N,L)) * light_diff * color; \n" " highp vec4 diffuse = abs(dot(N,L)) * light_diff * color; \n"
" highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" " highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n"
"gl_FragColor = light_amb*color + diffuse + specular ; \n" "out_color = light_amb*color + diffuse + specular ; \n"
"} \n" "} \n"
"\n" "\n"
}; };
@ -105,8 +106,8 @@ rendering_program.bind();
//Vertex source code //Vertex source code
const char vertex_source_points[] = const char vertex_source_points[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"uniform highp float point_size;\n" "uniform highp float point_size;\n"
@ -119,11 +120,12 @@ const char vertex_source_points[] =
//Vertex source code //Vertex source code
const char fragment_source_points[] = const char fragment_source_points[] =
{ {
"#version 120 \n" "#version 150 \n"
"uniform highp vec4 color; \n" "uniform highp vec4 color; \n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
"gl_FragColor = color; \n" "out_color = color; \n"
"} \n" "} \n"
"\n" "\n"
}; };

View File

@ -21,6 +21,7 @@ public:
Viewer(QWidget* parent); Viewer(QWidget* parent);
~Viewer() ~Viewer()
{ {
makeCurrent();
buffers[0].destroy(); buffers[0].destroy();
buffers[1].destroy(); buffers[1].destroy();
buffers[2].destroy(); buffers[2].destroy();

View File

@ -1,17 +1,12 @@
#include "Viewer.h" #include "Viewer.h"
#include <qapplication.h> #include <qapplication.h>
#include <CGAL/Qt/init_ogl_context.h>
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
// Read command lines arguments. CGAL::Qt::init_ogl_context(4,3);
QApplication application(argc,argv); QApplication application(argc,argv);
// Instantiate the viewer. // Instantiate the viewer.
Viewer viewer; Viewer viewer;
//for Windows
#if (QT_VERSION >= QT_VERSION_CHECK(5, 3, 0))
application.setAttribute(Qt::AA_UseDesktopOpenGL);
#endif
viewer.setWindowTitle("Intersection points of randomly generated circles."); viewer.setWindowTitle("Intersection points of randomly generated circles.");
// Make the viewer window visible on screen. // Make the viewer window visible on screen.

View File

@ -11,6 +11,14 @@ Viewer::Viewer(QWidget* parent )
{ {
extension_is_found = false; extension_is_found = false;
} }
Viewer::~Viewer()
{
makeCurrent();
for(int i=0; i<3; ++i)
vao[i].destroy();
for(int i=0; i<9; ++i)
buffers[i].destroy();
}
void Viewer::compile_shaders() void Viewer::compile_shaders()
{ {
@ -32,16 +40,16 @@ void Viewer::compile_shaders()
//Vertex source code //Vertex source code
const char vertex_source[] = const char vertex_source[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"attribute highp vec3 normal;\n" "in highp vec3 normal;\n"
"attribute highp vec4 center;\n" "in highp vec4 center;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"uniform highp mat4 mv_matrix; \n" "uniform highp mat4 mv_matrix; \n"
"varying highp vec4 fP; \n" "out highp vec4 fP; \n"
"varying highp vec3 fN; \n" "out highp vec3 fN; \n"
"void main(void)\n" "void main(void)\n"
"{\n" "{\n"
" fP = mv_matrix * vertex; \n" " fP = mv_matrix * vertex; \n"
@ -52,15 +60,16 @@ void Viewer::compile_shaders()
//Vertex source code //Vertex source code
const char fragment_source[] = const char fragment_source[] =
{ {
"#version 120 \n" "#version 150 \n"
"varying highp vec4 fP; \n" "in highp vec4 fP; \n"
"varying highp vec3 fN; \n" "in highp vec3 fN; \n"
"uniform highp vec4 color; \n" "uniform highp vec4 color; \n"
"uniform highp vec4 light_pos; \n" "uniform highp vec4 light_pos; \n"
"uniform highp vec4 light_diff; \n" "uniform highp vec4 light_diff; \n"
"uniform highp vec4 light_spec; \n" "uniform highp vec4 light_spec; \n"
"uniform highp vec4 light_amb; \n" "uniform highp vec4 light_amb; \n"
"uniform float spec_power ; \n" "uniform float spec_power ; \n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
@ -75,7 +84,7 @@ void Viewer::compile_shaders()
" highp vec4 diffuse = max(dot(N,L), 0.0) * light_diff * color; \n" " highp vec4 diffuse = max(dot(N,L), 0.0) * light_diff * color; \n"
" highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" " highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n"
"gl_FragColor = light_amb*color + diffuse ; \n" "out_color = light_amb*color + diffuse ; \n"
"} \n" "} \n"
"\n" "\n"
}; };
@ -111,8 +120,8 @@ void Viewer::compile_shaders()
//Vertex source code //Vertex source code
const char vertex_source_no_ext[] = const char vertex_source_no_ext[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"void main(void)\n" "void main(void)\n"
"{\n" "{\n"
@ -123,10 +132,11 @@ void Viewer::compile_shaders()
//Vertex source code //Vertex source code
const char fragment_source_no_ext[] = const char fragment_source_no_ext[] =
{ {
"#version 120 \n" "#version 150 \n"
"uniform highp vec4 color; \n" "uniform highp vec4 color; \n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
"gl_FragColor = color; \n" "out_color = color; \n"
"} \n" "} \n"
"\n" "\n"
}; };

View File

@ -13,6 +13,7 @@ class Viewer : public CGAL::QGLViewer
{ {
public: public:
Viewer(QWidget* parent = 0); Viewer(QWidget* parent = 0);
~Viewer();
GLuint dl_nb; GLuint dl_nb;
protected : protected :
virtual void draw(); virtual void draw();

View File

@ -54,21 +54,20 @@
namespace CGAL namespace CGAL
{ {
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
const char vertex_source_color[] = const char vertex_source_color[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"attribute highp vec3 normal;\n" "in highp vec3 normal;\n"
"attribute highp vec3 color;\n" "in highp vec3 color;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"uniform highp mat4 mv_matrix; \n" "uniform highp mat4 mv_matrix; \n"
"varying highp vec4 fP; \n" "out highp vec4 fP; \n"
"varying highp vec3 fN; \n" "out highp vec3 fN; \n"
"varying highp vec4 fColor; \n" "out highp vec4 fColor; \n"
"uniform highp float point_size; \n" "uniform highp float point_size; \n"
"void main(void)\n" "void main(void)\n"
@ -83,15 +82,16 @@ const char vertex_source_color[] =
const char fragment_source_color[] = const char fragment_source_color[] =
{ {
"#version 120 \n" "#version 150 \n"
"varying highp vec4 fP; \n" "in highp vec4 fP; \n"
"varying highp vec3 fN; \n" "in highp vec3 fN; \n"
"varying highp vec4 fColor; \n" "in highp vec4 fColor; \n"
"uniform highp vec4 light_pos; \n" "uniform highp vec4 light_pos; \n"
"uniform highp vec4 light_diff; \n" "uniform highp vec4 light_diff; \n"
"uniform highp vec4 light_spec; \n" "uniform highp vec4 light_spec; \n"
"uniform highp vec4 light_amb; \n" "uniform highp vec4 light_amb; \n"
"uniform float spec_power ; \n" "uniform float spec_power ; \n"
"out vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
" highp vec3 L = light_pos.xyz - fP.xyz; \n" " highp vec3 L = light_pos.xyz - fP.xyz; \n"
@ -104,18 +104,18 @@ const char fragment_source_color[] =
" highp vec3 R = reflect(-L, N); \n" " highp vec3 R = reflect(-L, N); \n"
" highp vec4 diffuse = max(dot(N,L), 0.0) * light_diff * fColor; \n" " highp vec4 diffuse = max(dot(N,L), 0.0) * light_diff * fColor; \n"
" highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" " highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n"
" gl_FragColor = light_amb*fColor + diffuse ; \n" " out_color = light_amb*fColor + diffuse ; \n"
"} \n" "} \n"
"\n" "\n"
}; };
const char vertex_source_p_l[] = const char vertex_source_p_l[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"attribute highp vec3 color;\n" "in highp vec3 color;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"varying highp vec4 fColor; \n" "out highp vec4 fColor; \n"
"uniform highp float point_size; \n" "uniform highp float point_size; \n"
"void main(void)\n" "void main(void)\n"
"{\n" "{\n"
@ -127,10 +127,11 @@ const char vertex_source_p_l[] =
const char fragment_source_p_l[] = const char fragment_source_p_l[] =
{ {
"#version 120 \n" "#version 150 \n"
"varying highp vec4 fColor; \n" "in highp vec4 fColor; \n"
"out vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
"gl_FragColor = fColor; \n" "out_color = fColor; \n"
"} \n" "} \n"
"\n" "\n"
}; };
@ -358,6 +359,7 @@ public:
~Basic_viewer_qt() ~Basic_viewer_qt()
{ {
makeCurrent();
for (unsigned int i=0; i<NB_VBO_BUFFERS; ++i) for (unsigned int i=0; i<NB_VBO_BUFFERS; ++i)
buffers[i].destroy(); buffers[i].destroy();

View File

@ -0,0 +1,53 @@
// Copyright (c) 2021 GeometryFactory Sarl (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
//
// $URL$
// $Id$
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
//
//
// Author(s) : Maxime Gimeno
#ifndef CGAL_QT_CONTEXT_INITIALIZATION_H
#define CGAL_QT_CONTEXT_INITIALIZATION_H
#include <CGAL/license/GraphicsView.h>
#include <QSurfaceFormat>
#include <QCoreApplication>
namespace CGAL
{
namespace Qt
{
inline void init_ogl_context(int major, int minor) {
QSurfaceFormat fmt;
#ifdef Q_OS_MAC
if(major == 4)
{
fmt.setVersion(4, 1);
}
else
{
fmt.setVersion(major, minor);
}
#else
fmt.setVersion(major, minor);
#endif
fmt.setRenderableType(QSurfaceFormat::OpenGL);
fmt.setProfile(QSurfaceFormat::CoreProfile);
fmt.setOption(QSurfaceFormat::DebugContext);
QSurfaceFormat::setDefaultFormat(fmt);
//for windows
QCoreApplication::setAttribute(::Qt::AA_UseDesktopOpenGL);
//We set the locale to avoid any trouble with VTK
setlocale(LC_ALL, "C");
}
} //end Qt
} //end CGAL
#endif // CGAL_QT_CONTEXT_INITIALIZATION_H

View File

@ -217,16 +217,6 @@ void CGAL::QGLViewer::initializeGL() {
|| QCoreApplication::arguments().contains(QStringLiteral("--old"))) || QCoreApplication::arguments().contains(QStringLiteral("--old")))
{ {
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setVersion(2,0);
format.setRenderableType(QSurfaceFormat::OpenGLES);
format.setSamples(0);
format.setOption(QSurfaceFormat::DebugContext);
QSurfaceFormat::setDefaultFormat(format);
needNewContext();
qDebug()<<"GL 4.3 context initialization failed. ";
is_ogl_4_3 = false; is_ogl_4_3 = false;
} }
else else

View File

@ -14,6 +14,7 @@
#include <QApplication> #include <QApplication>
#include <CGAL/Qt/resources.h> #include <CGAL/Qt/resources.h>
#include <CGAL/assertions_behaviour.h> #include <CGAL/assertions_behaviour.h>
#include <CGAL/Qt/init_ogl_context.h>
// Global random // Global random
CGAL::Random myrandom; CGAL::Random myrandom;
@ -23,15 +24,12 @@ int main(int argc, char** argv)
// std::cout<<"Size of dart: "<<sizeof(LCC::Dart)<<std::endl; // std::cout<<"Size of dart: "<<sizeof(LCC::Dart)<<std::endl;
CGAL::set_error_behaviour(CGAL::ABORT); CGAL::set_error_behaviour(CGAL::ABORT);
CGAL::Qt::init_ogl_context(4,3);
QApplication application(argc,argv); QApplication application(argc,argv);
application.setOrganizationDomain("cgal.org"); application.setOrganizationDomain("cgal.org");
application.setOrganizationName("CNRS and LIRIS' Establishments"); application.setOrganizationName("CNRS and LIRIS' Establishments");
application.setApplicationName("3D Linear Cell Complex"); application.setApplicationName("3D Linear Cell Complex");
//for windows
#if (QT_VERSION >= QT_VERSION_CHECK(5, 3, 0))
application.setAttribute(Qt::AA_UseDesktopOpenGL);
#endif
// Import resources from libCGALQt5 // Import resources from libCGALQt5
// See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE

View File

@ -17,7 +17,7 @@
#include <CGAL/Qt/qglviewer.h> #include <CGAL/Qt/qglviewer.h>
#include <QKeyEvent> #include <QKeyEvent>
#include <QOpenGLFunctions_2_1> #include <QOpenGLFunctions>
#include <QOpenGLVertexArrayObject> #include <QOpenGLVertexArrayObject>
#include <QGLBuffer> #include <QGLBuffer>
#include <QOpenGLShaderProgram> #include <QOpenGLShaderProgram>
@ -43,15 +43,15 @@ typedef Local_kernel::Vector_3 Local_vector;
//Vertex source code //Vertex source code
const char vertex_source_mono[] = const char vertex_source_mono[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"attribute highp vec3 normal;\n" "in highp vec3 normal;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"uniform highp mat4 mv_matrix; \n" "uniform highp mat4 mv_matrix; \n"
"varying highp vec4 fP; \n" "out highp vec4 fP; \n"
"varying highp vec3 fN; \n" "out highp vec3 fN; \n"
"void main(void)\n" "void main(void)\n"
"{\n" "{\n"
" fP = mv_matrix * vertex; \n" " fP = mv_matrix * vertex; \n"
@ -62,17 +62,17 @@ const char vertex_source_mono[] =
const char vertex_source_color[] = const char vertex_source_color[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"attribute highp vec3 normal;\n" "in highp vec3 normal;\n"
"attribute highp vec3 color;\n" "in highp vec3 color;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"uniform highp mat4 mv_matrix; \n" "uniform highp mat4 mv_matrix; \n"
"varying highp vec4 fP; \n" "out highp vec4 fP; \n"
"varying highp vec3 fN; \n" "out highp vec3 fN; \n"
"varying highp vec4 fColor; \n" "out highp vec4 fColor; \n"
"void main(void)\n" "void main(void)\n"
"{\n" "{\n"
" fP = mv_matrix * vertex; \n" " fP = mv_matrix * vertex; \n"
@ -85,15 +85,16 @@ const char vertex_source_color[] =
//Vertex source code //Vertex source code
const char fragment_source_mono[] = const char fragment_source_mono[] =
{ {
"#version 120 \n" "#version 150 \n"
"varying highp vec4 fP; \n" "in highp vec4 fP; \n"
"varying highp vec3 fN; \n" "in highp vec3 fN; \n"
"uniform highp vec4 color; \n" "uniform highp vec4 color; \n"
"uniform highp vec4 light_pos; \n" "uniform highp vec4 light_pos; \n"
"uniform highp vec4 light_diff; \n" "uniform highp vec4 light_diff; \n"
"uniform highp vec4 light_spec; \n" "uniform highp vec4 light_spec; \n"
"uniform highp vec4 light_amb; \n" "uniform highp vec4 light_amb; \n"
"uniform float spec_power ; \n" "uniform float spec_power ; \n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
@ -108,22 +109,23 @@ const char fragment_source_mono[] =
" highp vec4 diffuse = max(dot(N,L), 0.0) * light_diff * color; \n" " highp vec4 diffuse = max(dot(N,L), 0.0) * light_diff * color; \n"
" highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" " highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n"
"gl_FragColor = light_amb*color + diffuse ; \n" "out_color = light_amb*color + diffuse ; \n"
"} \n" "} \n"
"\n" "\n"
}; };
const char fragment_source_color[] = const char fragment_source_color[] =
{ {
"#version 120 \n" "#version 150 \n"
"varying highp vec4 fP; \n" "in highp vec4 fP; \n"
"varying highp vec3 fN; \n" "in highp vec3 fN; \n"
"varying highp vec4 fColor; \n" "in highp vec4 fColor; \n"
"uniform highp vec4 light_pos; \n" "uniform highp vec4 light_pos; \n"
"uniform highp vec4 light_diff; \n" "uniform highp vec4 light_diff; \n"
"uniform highp vec4 light_spec; \n" "uniform highp vec4 light_spec; \n"
"uniform highp vec4 light_amb; \n" "uniform highp vec4 light_amb; \n"
"uniform float spec_power ; \n" "uniform float spec_power ; \n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
@ -138,7 +140,7 @@ const char fragment_source_color[] =
" highp vec4 diffuse = max(dot(N,L), 0.0) * light_diff * fColor; \n" " highp vec4 diffuse = max(dot(N,L), 0.0) * light_diff * fColor; \n"
" highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n" " highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; \n"
"gl_FragColor = light_amb*fColor + diffuse ; \n" "out_color = light_amb*fColor + diffuse ; \n"
"} \n" "} \n"
"\n" "\n"
}; };
@ -146,8 +148,8 @@ const char fragment_source_color[] =
//Vertex source code //Vertex source code
const char vertex_source_p_l[] = const char vertex_source_p_l[] =
{ {
"#version 120 \n" "#version 150 \n"
"attribute highp vec4 vertex;\n" "in highp vec4 vertex;\n"
"uniform highp mat4 mvp_matrix;\n" "uniform highp mat4 mvp_matrix;\n"
"void main(void)\n" "void main(void)\n"
"{\n" "{\n"
@ -157,10 +159,11 @@ const char vertex_source_p_l[] =
//Vertex source code //Vertex source code
const char fragment_source_p_l[] = const char fragment_source_p_l[] =
{ {
"#version 120 \n" "#version 150 \n"
"uniform highp vec4 color; \n" "uniform highp vec4 color; \n"
"out highp vec4 out_color; \n"
"void main(void) { \n" "void main(void) { \n"
"gl_FragColor = color; \n" "out_color = color; \n"
"} \n" "} \n"
"\n" "\n"
}; };
@ -194,7 +197,7 @@ typename K::Vector_3 compute_normal_of_face(const std::vector<typename K::Point_
return (typename K::Construct_scaled_vector_3()(normal, 1.0/nb)); return (typename K::Construct_scaled_vector_3()(normal, 1.0/nb));
} }
class Basic_viewer : public CGAL::QGLViewer, public QOpenGLFunctions_2_1 class Basic_viewer : public CGAL::QGLViewer, public QOpenGLFunctions
{ {
struct Vertex_info struct Vertex_info
{ {

View File

@ -15,6 +15,7 @@
#include <CGAL/Qt/Basic_viewer_qt.h> #include <CGAL/Qt/Basic_viewer_qt.h>
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Linear_cell_complex_operations.h> #include <CGAL/Linear_cell_complex_operations.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -405,6 +406,7 @@ void draw(const CGAL_LCC_TYPE& alcc,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"lccviewer","\0"}; const char* argv[2]={"lccviewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -18,6 +18,7 @@
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Nef_3/SNC_iteration.h> #include <CGAL/Nef_3/SNC_iteration.h>
#include <CGAL/circulator.h> #include <CGAL/circulator.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -253,6 +254,7 @@ void draw(const CGAL_NEF3_TYPE &anef,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc = 1; int argc = 1;
const char *argv[2] = {"nef_polyhedron_viewer", "\0"}; const char *argv[2] = {"nef_polyhedron_viewer", "\0"};
QApplication app(argc, const_cast<char **>(argv)); QApplication app(argc, const_cast<char **>(argv));

View File

@ -17,6 +17,7 @@
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h> #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -260,6 +261,7 @@ void draw(const CGAL_P2T2_TYPE& ap2t2,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"p2t2_viewer","\0"}; const char* argv[2]={"p2t2_viewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -76,6 +76,7 @@ public:
} }
~Scene() { ~Scene() {
ui->viewer->makeCurrent();
for(int i=0; i<24; i++) for(int i=0; i<24; i++)
buffers[i].destroy(); buffers[i].destroy();
for(int i=0; i<12; i++) for(int i=0; i<12; i++)

View File

@ -1,9 +1,11 @@
#include "MainWindow.h" #include "MainWindow.h"
#include <QApplication> #include <QApplication>
#include <CGAL/Qt/init_ogl_context.h>
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
CGAL::Qt::init_ogl_context(2,1);
QApplication a(argc, argv); QApplication a(argc, argv);
MainWindow w; MainWindow w;
//w.ui->setupUi(w); //w.ui->setupUi(w);

View File

@ -1,18 +1,17 @@
#include "MainWindow.h" #include "MainWindow.h"
#include <QApplication> #include <QApplication>
#include <CGAL/Qt/resources.h> #include <CGAL/Qt/resources.h>
#include <CGAL/Qt/init_ogl_context.h>
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
QApplication application(argc,argv);
CGAL::Qt::init_ogl_context(2, 1);
QApplication application(argc,argv);
application.setOrganizationDomain("inria.fr"); application.setOrganizationDomain("inria.fr");
application.setOrganizationName("INRIA"); application.setOrganizationName("INRIA");
application.setApplicationName("3D Periodic Lloyd"); application.setApplicationName("3D Periodic Lloyd");
//for windows
#if (QT_VERSION >= QT_VERSION_CHECK(5, 3, 0))
application.setAttribute(Qt::AA_UseDesktopOpenGL);
#endif
// Import resources from libCGAL (QT5). // Import resources from libCGAL (QT5).
// See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE // See https://doc.qt.io/qt-5/qdir.html#Q_INIT_RESOURCE

View File

@ -27,6 +27,7 @@ public:
{} {}
~Viewer() ~Viewer()
{ {
makeCurrent();
for(int i=0; i<4; i++) for(int i=0; i<4; i++)
{ {
buffers[i].destroy(); buffers[i].destroy();

View File

@ -35,6 +35,7 @@ void draw(const PS& aps);
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Point_set_3.h> #include <CGAL/Point_set_3.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -100,6 +101,7 @@ void draw(const Point_set_3<P, V>& apointset,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"point_set_viewer","\0"}; const char* argv[2]={"point_set_viewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -38,7 +38,7 @@ void draw(const P& ap);
#endif #endif
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Polygon_2.h> #include <CGAL/Polygon_2.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -122,6 +122,7 @@ void draw(const CGAL::Polygon_2<T, C>& ap2,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"t2_viewer","\0"}; const char* argv[2]={"t2_viewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -37,7 +37,7 @@ void draw(const PH& aph);
#endif #endif
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Polygon_with_holes_2.h> #include <CGAL/Polygon_with_holes_2.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -138,6 +138,7 @@ void draw(const CGAL::Polygon_with_holes_2<T, C>& ap2,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"t2_viewer","\0"}; const char* argv[2]={"t2_viewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -380,6 +380,7 @@ Viewer::Viewer(QWidget* parent,
Viewer::~Viewer() Viewer::~Viewer()
{ {
makeCurrent();
QSettings viewer_settings; QSettings viewer_settings;
viewer_settings.setValue("cam_pos", viewer_settings.setValue("cam_pos",
QString("%1,%2,%3") QString("%1,%2,%3")

View File

@ -16,7 +16,7 @@
#include <CGAL/Qt/Basic_viewer_qt.h> #include <CGAL/Qt/Basic_viewer_qt.h>
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Polyhedron_3.h> #include <CGAL/Polyhedron_3.h>
#include <CGAL/draw_face_graph.h> #include <CGAL/draw_face_graph.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -45,6 +45,7 @@ void draw(const CGAL_POLY_TYPE& apoly,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=2; int argc=2;
const char* argv[2]={"polyhedron_viewer","--old"}; const char* argv[2]={"polyhedron_viewer","--old"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -48,6 +48,7 @@ MainWindow::MainWindow(QWidget* parent)
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
m_pViewer->makeCurrent();
delete ui; delete ui;
} }

View File

@ -18,9 +18,12 @@
#include "MainWindow.h" #include "MainWindow.h"
#include <QApplication> #include <QApplication>
#include <CGAL/Qt/resources.h> #include <CGAL/Qt/resources.h>
#include <CGAL/Qt/init_ogl_context.h>
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
CGAL::Qt::init_ogl_context(2, 1);
QApplication app(argc, argv); QApplication app(argc, argv);
app.setOrganizationDomain("inria.fr"); app.setOrganizationDomain("inria.fr");
app.setOrganizationName("INRIA"); app.setOrganizationName("INRIA");

View File

@ -28,6 +28,7 @@ Scene::Scene()
Scene::~Scene() Scene::~Scene()
{ {
delete m_pPolyhedron; delete m_pPolyhedron;
} }

View File

@ -32,6 +32,7 @@ void draw(const SM& asm);
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Surface_mesh.h> #include <CGAL/Surface_mesh.h>
#include <CGAL/draw_face_graph.h> #include <CGAL/draw_face_graph.h>
namespace CGAL namespace CGAL
@ -51,6 +52,7 @@ void draw(const Surface_mesh<K>& amesh,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"surface_mesh_viewer","\0"}; const char* argv[2]={"surface_mesh_viewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -21,6 +21,7 @@
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
namespace CGAL { namespace CGAL {
@ -409,6 +410,7 @@ void draw(const Mesh& alcc,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"lccviewer","\0"}; const char* argv[2]={"lccviewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -17,6 +17,7 @@
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Triangulation_2.h> #include <CGAL/Triangulation_2.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -144,6 +145,7 @@ void draw(const CGAL_T2_TYPE& at2,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"t2_viewer","\0"}; const char* argv[2]={"t2_viewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -13,18 +13,17 @@
#include "MainWindow.h" #include "MainWindow.h"
#include <QApplication> #include <QApplication>
#include <CGAL/Qt/init_ogl_context.h>
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
CGAL::Qt::init_ogl_context(2, 1);
QApplication app(argc, argv); QApplication app(argc, argv);
app.setOrganizationDomain("inria.fr"); app.setOrganizationDomain("inria.fr");
app.setOrganizationName("INRIA"); app.setOrganizationName("INRIA");
app.setApplicationName("3D Triangulation Demo"); app.setApplicationName("3D Triangulation Demo");
//for windows
#if (QT_VERSION >= QT_VERSION_CHECK(5, 3, 0))
app.setAttribute(Qt::AA_UseDesktopOpenGL);
#endif
MainWindow mw; MainWindow mw;
mw.show(); mw.show();

View File

@ -17,6 +17,7 @@
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Triangulation_3.h> #include <CGAL/Triangulation_3.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
@ -150,6 +151,7 @@ void draw(const CGAL_T3_TYPE& at3,
if (!cgal_test_suite) if (!cgal_test_suite)
{ {
CGAL::Qt::init_ogl_context(4,3);
int argc=1; int argc=1;
const char* argv[2]={"t3_viewer","\0"}; const char* argv[2]={"t3_viewer","\0"};
QApplication app(argc,const_cast<char**>(argv)); QApplication app(argc,const_cast<char**>(argv));

View File

@ -17,6 +17,7 @@
#ifdef CGAL_USE_BASIC_VIEWER #ifdef CGAL_USE_BASIC_VIEWER
#include <CGAL/Qt/init_ogl_context.h>
#include <CGAL/Random.h> #include <CGAL/Random.h>
#include <CGAL/Triangulation_utils_2.h> #include <CGAL/Triangulation_utils_2.h>
#include <CGAL/Voronoi_diagram_2/Face.h> #include <CGAL/Voronoi_diagram_2/Face.h>
@ -316,6 +317,7 @@ void draw(const CGAL_VORONOI_TYPE &av2,
#endif #endif
if (!cgal_test_suite) { if (!cgal_test_suite) {
CGAL::Qt::init_ogl_context(4,3);
int argc = 1; int argc = 1;
const char *argv[2] = {"voronoi_2_viewer", "\0"}; const char *argv[2] = {"voronoi_2_viewer", "\0"};
QApplication app(argc, const_cast<char **>(argv)); QApplication app(argc, const_cast<char **>(argv));