MNE-CPP  0.1.9
A Framework for Electrophysiology
shownormalsmaterial.cpp
Go to the documentation of this file.
1 //=============================================================================================================
35 //=============================================================================================================
36 // INCLUDES
37 //=============================================================================================================
38 
39 #include "shownormalsmaterial.h"
40 
41 //=============================================================================================================
42 // QT INCLUDES
43 //=============================================================================================================
44 
45 #include <QColor>
46 #include <Qt3DRender/qeffect.h>
47 #include <Qt3DRender/qtechnique.h>
48 #include <Qt3DRender/qshaderprogram.h>
49 #include <Qt3DRender/qparameter.h>
50 #include <Qt3DRender/qrenderpass.h>
51 #include <QFilterKey>
52 #include <Qt3DRender/qgraphicsapifilter.h>
53 
54 #include <QUrl>
55 #include <QVector3D>
56 #include <QVector4D>
57 
58 //=============================================================================================================
59 // USED NAMESPACES
60 //=============================================================================================================
61 
62 using namespace DISP3DLIB;
63 using namespace Qt3DRender;
64 
65 //=============================================================================================================
66 // DEFINE MEMBER METHODS
67 //=============================================================================================================
68 
70 : QMaterial(parent)
71 , m_pVertexEffect(new QEffect())
72 , m_pVertexGL3Technique(new QTechnique())
73 , m_pVertexGL3RenderPass(new QRenderPass())
74 , m_pVertexGL3Shader(new QShaderProgram())
75 , m_pFilterKey(new QFilterKey)
76 {
77  this->init();
78 }
79 
80 //=============================================================================================================
81 
82 void ShowNormalsMaterial::init()
83 {
84  //Set shader
85  m_pVertexGL3Shader->setVertexShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/engine/model/materials/shaders/gl3/shownormals.vert"))));
86  m_pVertexGL3Shader->setGeometryShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/engine/model/materials/shaders/gl3/shownormals.geom"))));
87  m_pVertexGL3Shader->setFragmentShaderCode(QShaderProgram::loadSource(QUrl(QStringLiteral("qrc:/engine/model/materials/shaders/gl3/shownormals.frag"))));
88  m_pVertexGL3RenderPass->setShaderProgram(m_pVertexGL3Shader);
89 
90  //Set OpenGL version - This material can only be used with opengl 4.0 or higher since it is using geometry shaders
91  m_pVertexGL3Technique->graphicsApiFilter()->setApi(QGraphicsApiFilter::OpenGL);
92  m_pVertexGL3Technique->graphicsApiFilter()->setMajorVersion(3);
93  m_pVertexGL3Technique->graphicsApiFilter()->setMinorVersion(2);
94  m_pVertexGL3Technique->graphicsApiFilter()->setProfile(QGraphicsApiFilter::CoreProfile);
95 
96  m_pFilterKey->setName(QStringLiteral("renderingStyle"));
97  m_pFilterKey->setValue(QStringLiteral("forwardTransparent"));
98  m_pVertexGL3Technique->addFilterKey(m_pFilterKey);
99 
100  m_pVertexGL3Technique->addRenderPass(m_pVertexGL3RenderPass);
101 
102  m_pVertexEffect->addTechnique(m_pVertexGL3Technique);
103 
104  this->setEffect(m_pVertexEffect);
105 }
ShowNormalsMaterial(Qt3DCore::QNode *parent=0)
ShowNormalsMaterial class declaration.