WIP Shader fixes

This commit is contained in:
Maxime Gimeno 2018-07-03 13:53:57 +02:00
parent 2c83b2c2f5
commit f80f318503
29 changed files with 131 additions and 92 deletions

View File

@ -1204,9 +1204,9 @@ protected:
//C o n t e x t
bool is_ogl_4_3;
public:
//! Is used to know if the openGL context is 4.3 or 2.1.
//! Is used to know if the openGL context is 4.3 or ES 2.0.
//! @returns `true` if the context is 4.3.
//! @returns `false` if the context is 2.1.
//! @returns `false` if the context is ES 2.0.
bool isOpenGL_4_3()const {return is_ogl_4_3; }
};

View File

@ -204,7 +204,7 @@ This method is automatically called once, before the first call to paintGL().
Overload init() instead of this method to modify viewer specific OpenGL state.
If a 4.3 context could not be set, a 2.1 context will be used instead.
If a 4.3 context could not be set, a ES 2.0 context will be used instead.
\see `isOpenGL_4_3()`
*/
CGAL_INLINE_FUNCTION
@ -213,13 +213,13 @@ void CGAL::QGLViewer::initializeGL() {
format.setDepthBufferSize(24);
format.setStencilBufferSize(8);
format.setVersion(4,3);
format.setProfile(QSurfaceFormat::CompatibilityProfile);
format.setProfile(QSurfaceFormat::CoreProfile);
format.setSamples(0);
format.setOption(QSurfaceFormat::DebugContext);
context()->setFormat(format);
bool created = context()->create();
if(!created || context()->format().profile() != QSurfaceFormat::CompatibilityProfile) {
// impossible to get a 4.3 compatibility profile, retry with 2.0
if(!created || context()->format().profile() != QSurfaceFormat::CoreProfile) {
// impossible to get a 4.3 core profile, retry with ES 2.0
format = QSurfaceFormat::defaultFormat();
context()->setFormat(format);
created = context()->create();
@ -456,11 +456,11 @@ CGAL_INLINE_FUNCTION
void CGAL::QGLViewer::postDraw() {
// Pivot point, line when camera rolls, zoom region
if (gridIsDrawn()) {
glLineWidth(1.0);
if(!is_ogl_4_3)
glLineWidth(1.0);
drawGrid(camera()->sceneRadius());
}
if (axisIsDrawn()) {
glLineWidth(2.0);
drawAxis(1.0);
}

View File

@ -562,7 +562,7 @@ public:
//Vertex source code
const char tex_vertex_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"attribute highp vec4 vertex;\n"
"attribute highp vec2 tex_coord; \n"
"uniform highp mat4 mvp_matrix;\n"
@ -577,7 +577,7 @@ public:
//Vertex source code
const char tex_fragment_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"uniform sampler2D texture;\n"
"varying highp vec2 texc;\n"
"void main(void) { \n"

View File

@ -376,7 +376,7 @@ private:
template<typename T>
const char* Volume_plane<T>::vertexShader_source =
"#version 120 \n"
"//#version 100 \n"
"attribute highp vec4 vertex; \n"
"attribute highp float color; \n"
"uniform highp mat4 mvp_matrix; \n"
@ -388,13 +388,13 @@ const char* Volume_plane<T>::vertexShader_source =
template<typename T>
const char* Volume_plane<T>::fragmentShader_source =
"#version 120\n"
"//#version 100 \n"
"varying highp vec4 fullColor; \n"
"void main() { gl_FragColor = fullColor; } \n";
template<typename T>
const char* Volume_plane<T>::vertexShader_bordures_source =
"#version 120 \n"
"//#version 100 \n"
"attribute highp vec4 vertex; \n"
"attribute highp vec4 colors; \n"
"uniform highp mat4 mvp_matrix; \n"
@ -406,7 +406,7 @@ const char* Volume_plane<T>::vertexShader_bordures_source =
template<typename T>
const char* Volume_plane<T>::fragmentShader_bordures_source =
"#version 120\n"
"//#version 100 \n"
"varying highp vec4 fullColor; \n"
"void main() { gl_FragColor = fullColor; } \n";
@ -469,7 +469,7 @@ void Volume_plane<T>::draw(Viewer_interface *viewer) const {
}
mvp.translate(QVector3D(tx, ty, tz));
if(!program_bordures)
if(!program_bordures)
{
if(viewer->isOpenGL_4_3())
program_bordures = viewer->getShaderProgram(PROGRAM_SOLID_WIREFRAME);
@ -498,6 +498,7 @@ void Volume_plane<T>::draw(Viewer_interface *viewer) const {
drawRectangle(*this, !viewer->isOpenGL_4_3());
program_bordures->bind();
vaos[2]->bind();
rectBuffer.create();
rectBuffer.bind();
rectBuffer.allocate(v_rec.data(), static_cast<int>(v_rec.size()*sizeof(float)));
@ -509,6 +510,7 @@ void Volume_plane<T>::draw(Viewer_interface *viewer) const {
{
viewer->glLineWidth(4.0f);
viewer->glDrawArrays(GL_LINE_LOOP, 0, static_cast<GLsizei>(v_rec.size()/3));
viewer->glLineWidth(1.0f);
}
else
{
@ -522,10 +524,11 @@ void Volume_plane<T>::draw(Viewer_interface *viewer) const {
viewer->glDepthRangef(0.0,1.0);
}
rectBuffer.release();
vaos[1]->release();
program_bordures->release();
viewer->glLineWidth(1.0f);
program.bind();
vaos[1]->bind();
int mvpLoc = program.uniformLocation("mvp_matrix");
int fLoc = program.uniformLocation("f_matrix");
program.setUniformValue(mvpLoc, mvp);
@ -535,7 +538,6 @@ void Volume_plane<T>::draw(Viewer_interface *viewer) const {
program.enableAttributeArray(vloc);
program.setAttributeBuffer(vloc, GL_FLOAT, 0, 3);
vVBO.release();
cbuffer.bind();
int colorLoc = program.attributeLocation("color");
program.enableAttributeArray(colorLoc);
@ -555,6 +557,7 @@ void Volume_plane<T>::draw(Viewer_interface *viewer) const {
cbuffer.release();
printGlError(viewer, __LINE__);
vaos[1]->release();
program.release();
printGlError(viewer, __LINE__);
@ -605,9 +608,11 @@ void Volume_plane<T>::init(Viewer_interface* viewer) {
assert(vertices.size() == (3 * adim_ * bdim_));
vVBO.create();
vaos[1]->bind();
vVBO.bind();
vVBO.allocate(vertices.data(),static_cast<int>(sizeof(float) * vertices.size()));
vVBO.release();
vaos[1]->release();
printGlError(viewer, __LINE__);
// for each patch

View File

@ -222,7 +222,7 @@ void Volume_plane_intersection::draw(Viewer_interface* viewer) const {
}
if(!viewer->isOpenGL_4_3())
viewer->glLineWidth(1.0f);
viewer->glDepthRangef(0.0f,1.0f);
viewer->glDepthRangef(0.0f,1.0f);
}
Volume_plane_intersection::Volume_plane_intersection(float x, float y, float z,

View File

@ -210,7 +210,6 @@ struct Scene_edit_box_item_priv{
//Vertex source code
const char vertex_source[] =
{
"#version 120 \n "
"attribute highp vec4 vertex; "
"attribute highp vec3 normals; "
"attribute highp vec4 colors; "
@ -221,9 +220,13 @@ struct Scene_edit_box_item_priv{
"varying highp vec4 color; "
"void main(void) "
"{ "
" color = colors; "
" color = colors; "
" fP = mv_matrix * vertex; "
" fN = mat3(mv_matrix)* normals; "
" mat3 mv_matrix_3; "
" mv_matrix_3[0] = mv_matrix[0].xyz; "
" mv_matrix_3[1] = mv_matrix[1].xyz; "
" mv_matrix_3[2] = mv_matrix[2].xyz; "
" fN = mv_matrix_3* normals; "
" gl_Position = mvp_matrix * vertex; "
"}\n "
"\n "
@ -232,7 +235,7 @@ struct Scene_edit_box_item_priv{
//Fragment source code
const char fragment_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"varying highp vec4 color;"
"varying highp vec4 fP; "
"varying highp vec3 fN; "
@ -407,7 +410,6 @@ void Scene_edit_box_item::draw(Viewer_interface *viewer) const
drawSpheres(viewer, f_matrix);
drawTransparent(viewer);
}
void Scene_edit_box_item::drawEdges(Viewer_interface* viewer) const
@ -453,6 +455,7 @@ void Scene_edit_box_item::drawEdges(Viewer_interface* viewer) const
drawSpheres(viewer, f_matrix);
}
drawHl(viewer);
drawTransparent(viewer);
}
void Scene_edit_box_item::compute_bbox() const

View File

@ -300,7 +300,7 @@ Scene_alpha_shape_item::Scene_alpha_shape_item(Scene_points_with_normal_item *po
}
const char vertex_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"attribute highp vec4 vertex;\n"
"attribute highp vec3 colors;\n"
"uniform highp mat4 mvp_matrix;\n"

View File

@ -305,7 +305,7 @@ void Scene_edit_polyhedron_item_priv::init_values()
const char vertex_shader_source_bbox[] =
{
"#version 120 \n"
"//#version 100 \n"
"attribute highp vec3 vertex; \n"
"attribute highp vec3 colors; \n"
@ -324,7 +324,7 @@ void Scene_edit_polyhedron_item_priv::init_values()
};
const char fragment_shader_source[]=
{
"#version 120 \n"
"//#version 100 \n"
"varying vec3 fColors; \n"
" \n"
"void main(void) \n"
@ -339,7 +339,7 @@ void Scene_edit_polyhedron_item_priv::init_values()
//Vertex source code
const char vertex_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"attribute highp vec4 vertex; \n"
"attribute highp vec4 colors; \n"
"uniform highp mat4 mvp_matrix; \n"
@ -347,8 +347,8 @@ void Scene_edit_polyhedron_item_priv::init_values()
"varying highp vec4 color; \n"
"varying highp float dist[6]; \n"
"uniform bool is_clipbox_on; \n"
"uniform highp mat4x4 clipbox1; \n"
"uniform highp mat4x4 clipbox2; \n"
"uniform highp mat4 clipbox1; \n"
"uniform highp mat4 clipbox2; \n"
" \n"
"void compute_distances(void) \n"
"{ \n"
@ -379,7 +379,7 @@ void Scene_edit_polyhedron_item_priv::init_values()
//Fragment source code
const char fragment_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"varying highp vec4 color; \n"
"varying highp float dist[6]; \n"
"uniform bool is_clipbox_on; \n"

View File

@ -326,7 +326,7 @@ void Scene::initializeGL(CGAL::Three::Viewer_interface* viewer)
//Vertex source code
const char vertex_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"attribute highp vec4 vertex; \n"
"attribute highp vec2 v_texCoord; \n"
"uniform highp mat4 projection_matrix; \n"
@ -341,7 +341,7 @@ void Scene::initializeGL(CGAL::Three::Viewer_interface* viewer)
//Fragment source code
const char fragment_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"varying highp vec2 f_texCoord; \n"
"uniform sampler2D texture; \n"
"void main(void) \n"

View File

@ -519,13 +519,13 @@ struct Scene_c3t3_item_priv {
std::set<Tr::Cell_handle> intersected_cells;
QSlider* tet_Slider;
//!Allows OpenGL 2.1 context to get access to glDrawArraysInstanced.
//!Allows OpenGL 2.0 context to get access to glDrawArraysInstanced.
typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
//!Allows OpenGL 2.1 context to get access to glVertexAttribDivisor.
//!Allows OpenGL 2.0 context to get access to glVertexAttribDivisor.
typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
//!Allows OpenGL 2.1 context to get access to gkFrameBufferTexture2D.
//!Allows OpenGL 2.0 context to get access to gkFrameBufferTexture2D.
PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstanced;
//!Allows OpenGL 2.1 context to get access to glVertexAttribDivisor.
//!Allows OpenGL 2.0 context to get access to glVertexAttribDivisor.
PFNGLVERTEXATTRIBDIVISORARBPROC glVertexAttribDivisor;
mutable std::size_t positions_poly_size;

View File

@ -505,7 +505,6 @@ void Scene_image_item_priv::compile_shaders()
//Vertex source code
const char vertex_source[] =
{
"#version 120 \n"
"attribute highp vec4 vertex;\n"
"attribute highp vec3 normal;\n"
"attribute highp vec4 inColor;\n"
@ -519,14 +518,18 @@ void Scene_image_item_priv::compile_shaders()
"{\n"
" color=inColor; \n"
" fP = mv_matrix * vertex; \n"
" fN = mat3(mv_matrix)* normal; \n"
" mat3 mv_matrix_3; "
" mv_matrix_3[0] = mv_matrix[0].xyz; "
" mv_matrix_3[1] = mv_matrix[1].xyz; "
" mv_matrix_3[2] = mv_matrix[2].xyz; "
" fN = mv_matrix_3* normals; "
" gl_Position = mvp_matrix * vertex; \n"
"}"
};
//Fragment source code
const char fragment_source[] =
{
"#version 120 \n"
"//#version 100 \n"
"varying highp vec4 fP; \n"
"varying highp vec3 fN; \n"
"varying highp vec4 color; \n"

View File

@ -794,7 +794,7 @@ void Scene_points_with_normal_item::drawPoints(CGAL::Three::Viewer_interface* vi
d->initializeBuffers(viewer);
GLfloat point_size;
viewer->glGetFloatv(GL_POINT_SIZE, &point_size);
// viewer->glPointSize(d->point_Slider->value());
viewer->setGlPointSize(d->point_Slider->value());
double ratio_displayed = 1.0;
if ((viewer->inFastDrawing () || d->isPointSliderMoving())
&&((d->nb_points )/3 > limit_fast_drawing)) // arbitrary large value
@ -848,7 +848,7 @@ void Scene_points_with_normal_item::drawPoints(CGAL::Three::Viewer_interface* vi
else
vaos[Scene_points_with_normal_item_priv::Selected_points]->release();
d->program->release();
// viewer->glPointSize(point_size);
viewer->setGlPointSize(point_size);
}
// Gets wrapped point set
Point_set* Scene_points_with_normal_item::point_set()

View File

@ -719,11 +719,11 @@ void Scene_polyhedron_selection_item::drawEdges(CGAL::Three::Viewer_interface* v
{
d->program = getShaderProgram(PROGRAM_SOLID_WIREFRAME);
attribBuffers(viewer,PROGRAM_SOLID_WIREFRAME);
d->program->bind();
d->program->setUniformValue("viewport", vp);
d->program->setUniformValue("width", 3.0f);
d->program->setUniformValue("near", (GLfloat)viewer->camera()->zNear());
d->program->setUniformValue("far" , (GLfloat)viewer->camera()->zFar());
d->program->bind();
}
d->program->setAttributeValue("colors",QColor(255,153,51));
@ -759,7 +759,7 @@ void Scene_polyhedron_selection_item::drawEdges(CGAL::Three::Viewer_interface* v
viewer->glDrawArrays(GL_LINES, 0, static_cast<GLsizei>(d->nb_temp_lines/3));
d->program->release();
vaos[Scene_polyhedron_selection_item_priv::TempEdges]->release();
viewer->glLineWidth(3.0f);
if(!are_buffers_filled)
{
d->computeElements();
@ -772,6 +772,7 @@ void Scene_polyhedron_selection_item::drawEdges(CGAL::Three::Viewer_interface* v
d->program = getShaderProgram(PROGRAM_NO_SELECTION);
attribBuffers(viewer,PROGRAM_NO_SELECTION);
d->program->bind();
viewer->glLineWidth(3.0f);
}
else
{

View File

@ -38,7 +38,7 @@ public:
QString message;
bool _displayMessage;
QTimer messageTimer;
QOpenGLFunctions_4_3_Compatibility* _recentFunctions;
QOpenGLFunctions_4_3_Core* _recentFunctions;
bool is_2d_selection_mode;
// D e p t h P e e l i n g
@ -208,6 +208,7 @@ void Viewer::fastDraw()
void Viewer::init()
{
if(!isOpenGL_4_3())
{
std::cerr<<"The openGL context initialization failed "
@ -215,16 +216,16 @@ void Viewer::init()
}
else
{
d->_recentFunctions = new QOpenGLFunctions_4_3_Compatibility();
d->logger = new QOpenGLDebugLogger(this);
if(!d->logger->initialize())
qDebug()<<"logger could not init.";
else{
connect(d->logger, SIGNAL(messageLogged(QOpenGLDebugMessage)), this, SLOT(messageLogged(QOpenGLDebugMessage)));
d->logger->startLogging();
}
d->_recentFunctions = new QOpenGLFunctions_4_3_Core();
d->_recentFunctions->initializeOpenGLFunctions();
}
d->logger = new QOpenGLDebugLogger(this);
if(!d->logger->initialize())
qDebug()<<"logger could not init.";
else{
connect(d->logger, SIGNAL(messageLogged(QOpenGLDebugMessage)), this, SLOT(messageLogged(QOpenGLDebugMessage)));
d->logger->startLogging();
}
glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDARBPROC)this->context()->getProcAddress("glDrawArraysInstancedARB");
if(!glDrawArraysInstanced)
{
@ -255,7 +256,7 @@ void Viewer::init()
//Vertex source code
const char vertex_source_dist[] =
{
"#version 120 \n"
"//#version 100 \n"
"attribute highp vec4 vertex;\n"
"uniform highp mat4 mvp_matrix;\n"
"uniform highp float point_size;\n"
@ -269,7 +270,7 @@ void Viewer::init()
//Fragment source code
const char fragment_source_dist[] =
{
"#version 120 \n"
"//#version 100 \n"
"void main(void) { \n"
"gl_FragColor = vec4(0.0,0.0,0.0,1.0); \n"
"} \n"
@ -1186,7 +1187,7 @@ void Viewer::enableClippingBox(QVector4D box[6])
d->clipbox[i] = box[i];
}
QOpenGLFunctions_4_3_Compatibility* Viewer::openGL_4_3_functions() { return d->_recentFunctions; }
QOpenGLFunctions_4_3_Core *Viewer::openGL_4_3_functions() { return d->_recentFunctions; }
void Viewer::set2DSelectionMode(bool b) { d->is_2d_selection_mode = b; }

View File

@ -143,7 +143,7 @@ protected:
double prev_radius;
public:
QOpenGLFunctions_4_3_Compatibility* openGL_4_3_functions() Q_DECL_OVERRIDE;
QOpenGLFunctions_4_3_Core* openGL_4_3_functions() Q_DECL_OVERRIDE;
void setCurrentPass(int pass) Q_DECL_OVERRIDE;
void setDepthWriting(bool writing_depth) Q_DECL_OVERRIDE;
void setDepthPeelingFbo(QOpenGLFramebufferObject *fbo) Q_DECL_OVERRIDE;

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec3 normals;
attribute highp vec3 colors;
@ -16,7 +16,13 @@ void main(void)
gl_PointSize = point_size;
color = vec4(colors, vertex.x * cutplane.x + vertex.y * cutplane.y + vertex.z * cutplane.z + cutplane.w);
fP = mv_matrix * vertex;
fN = mat3(mv_matrix)* normals;
mat3 mv_matrix_3;
mv_matrix_3[0] = mv_matrix[0].xyz;
mv_matrix_3[1] = mv_matrix[1].xyz;
mv_matrix_3[2] = mv_matrix[2].xyz;
fN = mv_matrix_3* normals;
highp mat4 transOB = mat4(1, 0, 0, 0, // first column
0, 1, 0, 0, // second column
0, 0, 1, 0, // third column

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec3 colors;
uniform highp mat4 mvp_matrix;

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec3 normals;
attribute highp vec3 colors;
@ -17,6 +17,10 @@ void main(void)
color = vec4(colors, center.x * cutplane.x + center.y * cutplane.y + center.z * cutplane.z + cutplane.w);
vec4 my_vertex = vec4(radius*vertex.x + center.x, radius* vertex.y + center.y, radius*vertex.z + center.z, 1.0) ;
fP = mv_matrix * my_vertex;
fN = mat3(mv_matrix)* normals;
mat3 mv_matrix_3;
mv_matrix_3[0] = mv_matrix[0].xyz;
mv_matrix_3[1] = mv_matrix[1].xyz;
mv_matrix_3[2] = mv_matrix[2].xyz;
fN = mv_matrix_3* normals;
gl_Position = mvp_matrix * my_vertex;
}

View File

@ -14,8 +14,8 @@ out VS_OUT
uniform mat4 mvp_matrix;
uniform mat4 mv_matrix;
uniform bool is_clipbox_on;
uniform highp mat4x4 clipbox1;
uniform highp mat4x4 clipbox2;
uniform highp mat4 clipbox1;
uniform highp mat4 clipbox2;
uniform highp float point_size;
void compute_distances(void)

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec3 normals;
attribute highp vec3 colors;
@ -14,9 +14,13 @@ uniform highp float point_size;
void main(void)
{
gl_PointSize = point_size;
color = vec4(colors, 1.0);
vec4 my_vertex = vec4(vertex.x + center.x, vertex.y + center.y, vertex.z + center.z, 1.0);
fP = mv_matrix * my_vertex;
fN = mat3(mv_matrix)* normals;
color = vec4(colors, 1.0);
vec4 my_vertex = vec4(vertex.x + center.x, vertex.y + center.y, vertex.z + center.z, 1.0);
fP = mv_matrix * my_vertex;
mat3 mv_matrix_3;
mv_matrix_3[0] = mv_matrix[0].xyz;
mv_matrix_3[1] = mv_matrix[1].xyz;
mv_matrix_3[2] = mv_matrix[2].xyz;
fN = mv_matrix_3* normals;
gl_Position = mvp_matrix * my_vertex;
}

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec3 normals;
attribute highp vec3 colors;
@ -16,10 +16,14 @@ void main(void)
{
gl_PointSize = point_size;
for(int i=0; i<6; ++i)
dist[i] = 1;
dist[i] = 1.0;
color = vec4(colors, 1.0);
fP = mv_matrix * vertex;
fN = mat3(mv_matrix)* normals;
mat3 mv_matrix_3;
mv_matrix_3[0] = mv_matrix[0].xyz;
mv_matrix_3[1] = mv_matrix[1].xyz;
mv_matrix_3[2] = mv_matrix[2].xyz;
fN = mv_matrix_3* normals;
gl_Position = mvp_matrix *
vec4(radius*vertex.x + center.x, radius* vertex.y + center.y, radius*vertex.z + center.z, 1.0) ;
}

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec3 normals;
attribute highp vec4 colors;
@ -9,8 +9,8 @@ varying highp vec3 fN;
varying highp vec4 color;
varying highp float dist[6];
uniform bool is_clipbox_on;
uniform highp mat4x4 clipbox1;
uniform highp mat4x4 clipbox2;
uniform highp mat4 clipbox1;
uniform highp mat4 clipbox2;
uniform highp float point_size;
void compute_distances(void)
@ -39,6 +39,10 @@ void main(void)
if(is_clipbox_on)
compute_distances();
fP = mv_matrix * vertex;
fN = mat3(mv_matrix)* normals;
mat3 mv_matrix_3;
mv_matrix_3[0] = mv_matrix[0].xyz;
mv_matrix_3[1] = mv_matrix[1].xyz;
mv_matrix_3[2] = mv_matrix[2].xyz;
fN = mv_matrix_3* normals;
gl_Position = mvp_matrix * vertex;
}

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec3 normal;
attribute highp vec2 v_texCoord;
@ -20,7 +20,11 @@ void main(void)
{
gl_PointSize = point_size;
vec4 P = mv_matrix * vertex;
vec3 N = mat3(mv_matrix)* normal;
mat3 mv_matrix_3;
mv_matrix_3[0] = mv_matrix[0].xyz;
mv_matrix_3[1] = mv_matrix[1].xyz;
mv_matrix_3[2] = mv_matrix[2].xyz;
vec3 N = mv_matrix_3* normal;
vec3 L = light_pos.xyz - P.xyz;
N = normalize(N);
L = normalize(L);
@ -30,6 +34,6 @@ void main(void)
else
diffuse = max(dot(N,L), 0.0) * light_diff.xyz;
f_texCoord = v_texCoord;
fColors = vec3(1.0f, 1.0f, 1.0f) * (light_amb.xyz + diffuse);
fColors = vec3(1.0, 1.0, 1.0) * (light_amb.xyz + diffuse);
gl_Position = mvp_matrix * f_matrix * vertex;
}

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec2 v_texCoord;
uniform highp vec3 color_lines;

View File

@ -1,4 +1,4 @@
#version 120
//#version 100
attribute highp vec4 vertex;
attribute highp vec3 colors;
uniform highp mat4 mvp_matrix;
@ -6,8 +6,8 @@ uniform highp mat4 f_matrix;
varying highp vec4 color;
varying highp float dist[6];
uniform bool is_clipbox_on;
uniform highp mat4x4 clipbox1;
uniform highp mat4x4 clipbox2;
uniform highp mat4 clipbox1;
uniform highp mat4 clipbox2;
uniform highp float point_size;
void compute_distances(void)

View File

@ -1,4 +1,4 @@
#version 150
#version 430
in GS_OUT
{

View File

@ -1,4 +1,4 @@
#version 150
#version 430
layout (lines) in;
layout (triangle_strip, max_vertices = 4) out;

View File

@ -1,4 +1,4 @@
#version 150
#version 430
in vec4 vertex;
in vec4 colors;

View File

@ -29,7 +29,7 @@
#include <QWidget>
#include <QPoint>
#include <QOpenGLFunctions>
#include <QOpenGLFunctions_4_3_Compatibility>
#include <QOpenGLFunctions_4_3_Core>
#include <CGAL/Qt/CreateOpenGLContext.h>
// forward declarations
class QWidget;
@ -104,7 +104,7 @@ public:
virtual bool hasText() const { return false; }
//! \brief Constructor
//!
//! Creates a valid context for OpenGL 2.1.
//! Creates a valid context for OpenGL ES 2.0.
//! \param parent the parent widget. It usually is the MainWindow.
Viewer_interface(QWidget* parent) : CGAL::QGLViewer(parent) {}
virtual ~Viewer_interface() {}
@ -175,11 +175,11 @@ public:
//! The textRenderer uses the painter to display 2D text over the 3D Scene.
//! \returns the viewer's TextRender
virtual TextRenderer* textRenderer() = 0;
//!Allows OpenGL 2.1 context to get access to glDrawArraysInstanced.
//!Allows OpenGL ES 2.0 context to get access to glDrawArraysInstanced.
typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount);
//!Allows OpenGL 2.1 context to get access to glVertexAttribDivisor.
//!Allows OpenGL ES 2.0 context to get access to glVertexAttribDivisor.
typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor);
//!Allows OpenGL 2.1 context to get access to glVertexAttribDivisor.
//!Allows OpenGL ES 2.0 context to get access to glVertexAttribDivisor.
typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint target, GLuint attachment, GLuint textarget, GLuint texture, GLint level);
PFNGLDRAWARRAYSINSTANCEDARBPROC glDrawArraysInstanced;
@ -257,9 +257,9 @@ public:
//! Gives acces to recent openGL(4.3) features, allowing use of things like
//! Geometry Shaders or Depth Textures.
//! @returns a pointer to an initialized QOpenGLFunctions_4_3_Compatibility if `isOpenGL_4_3()` is `true`
//! @returns a pointer to an initialized QOpenGLFunctions_4_3_Core if `isOpenGL_4_3()` is `true`
//! @returns NULL if `isOpenGL_4_3()` is `false`
virtual QOpenGLFunctions_4_3_Compatibility* openGL_4_3_functions() = 0;
virtual QOpenGLFunctions_4_3_Core* openGL_4_3_functions() = 0;
//! getter for point size under old openGL context;
virtual const GLfloat& getGlPointSize()const = 0;
//! setter for point size under old openGL context;