1 /**************************************************************************** 2 * MeshLab o o * 3 * A versatile mesh processing toolbox o o * 4 * _ O _ * 5 * Copyright(C) 2005-2008 \/)\/ * 6 * Visual Computing Lab /\/| * 7 * ISTI - Italian National Research Council | * 8 * \ * 9 * All rights reserved. * 10 * * 11 * This program is free software; you can redistribute it and/or modify * 12 * it under the terms of the GNU General Public License as published by * 13 * the Free Software Foundation; either version 2 of the License, or * 14 * (at your option) any later version. * 15 * * 16 * This program is distributed in the hope that it will be useful, * 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 19 * GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * 20 * for more details. * 21 * * 22 ****************************************************************************/ 23 #ifndef __RMPASS_H__ 24 #define __RMPASS_H__ 25 26 #include <QList> 27 #include <QString> 28 #include <QStringList> 29 #include <QDebug> 30 #include "GlState.h" 31 #include "UniformVar.h" 32 33 class RenderTarget 34 { 35 public: 36 RenderTarget(QString _name = QString(), bool _renderToScreen = false, 37 bool _colorClear = false, bool _depthClear = false, 38 float _clearColorValue = 0, float _depthClearValue = 0) 39 { 40 name = _name; 41 renderToScreen = _renderToScreen; 42 colorClear = _colorClear; 43 depthClear = _depthClear; 44 clearColorValue = _clearColorValue; 45 depthClearValue = _depthClearValue; 46 } 47 48 QString name; 49 bool renderToScreen; 50 bool colorClear; 51 bool depthClear; 52 float clearColorValue; 53 float depthClearValue; 54 }; 55 56 57 class RmPass 58 { 59 public: 60 61 RmPass(QString _name = QString(), int _index = -1) : name(_name)62 name(_name), index(_index) 63 {} 64 ~RmPass()65 virtual ~RmPass( ) {} 66 enum CodeType { FRAGMENT, VERTEX }; 67 68 UniformVar searchFragmentUniformVariable(QString &name); 69 UniformVar searchVertexUniformVariable(QString &name); addOpenGLState(GlState & state)70 void addOpenGLState(GlState &state) { states.append(state); } hasIndex()71 bool hasIndex() { return index != -1; } getIndex()72 int getIndex() { return index; } 73 setModelReference(QString _modelRef)74 void setModelReference(QString _modelRef) { modelRef = _modelRef; } getModelReference()75 QString& getModelReference() { return modelRef; } setModelReferenceFN(QString modRef)76 void setModelReferenceFN(QString modRef) { modelRefFile = modRef; } getModelReferenceFN()77 QString& getModelReferenceFN() { return modelRefFile; } 78 setFragment(QString _fragment)79 void setFragment(QString _fragment) { fragment = _fragment; } getFragment()80 QString& getFragment() { return fragment; } 81 setVertex(QString _vertex)82 void setVertex(QString _vertex) { vertex = _vertex; } getVertex()83 QString& getVertex() { return vertex; } 84 getName()85 QString& getName() { return name; } setRenderTarget(RenderTarget rt)86 void setRenderTarget(RenderTarget rt) { renderTarget = rt; } getRenderTarget()87 RenderTarget& getRenderTarget() { return renderTarget; } hasRenderTarget()88 bool hasRenderTarget() { return !renderTarget.name.isNull(); } 89 addFragmentUniform(UniformVar & var)90 void addFragmentUniform(UniformVar &var) { fragUniform.append(var); } addVertexUniform(UniformVar & var)91 void addVertexUniform(UniformVar &var) { vertUniform.append(var); } 92 fragmentUniformVariableSize()93 int fragmentUniformVariableSize() { return fragUniform.size(); } vertexUniformVariableSize()94 int vertexUniformVariableSize() { return vertUniform.size(); } 95 getFragmentUniform(int idx)96 UniformVar& getFragmentUniform(int idx) 97 { 98 return getUniform(idx, FRAGMENT); 99 } getVertexUniform(int idx)100 UniformVar& getVertexUniform(int idx) 101 { 102 return getUniform(idx, VERTEX); 103 } getUniform(int idx,CodeType codetype)104 UniformVar& getUniform(int idx, CodeType codetype) 105 { 106 return (codetype == FRAGMENT) ? 107 fragUniform[idx] : vertUniform[idx]; 108 } 109 openGLStatesSize()110 int openGLStatesSize() { return states.size(); } getOpenGLState(int idx)111 GlState& getOpenGLState(int idx) { return states[idx]; } 112 bool operator<(const RmPass &p) const { return index < p.index; } 113 114 private: 115 QString name; 116 int index; 117 118 QString fragment; 119 QString vertex; 120 121 QList<UniformVar> fragUniform; 122 QList<UniformVar> vertUniform; 123 124 QString modelRef; 125 QString modelRefFile; 126 QList<GlState> states; 127 128 RenderTarget renderTarget; 129 130 // we look for a variable declared as uniform in a specific 131 // source code (fragment or vertex's one) and check for its type 132 UniformVar searchUniformVariable(QString &name, CodeType codetype); 133 }; 134 #endif /* __RMPASS_H__ */ 135