Developer Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
OITLinkedList.hh
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4 * Copyright (C) 2001-2014 by Computer Graphics Group, RWTH Aachen *
5 * www.openflipper.org *
6 * *
7 *--------------------------------------------------------------------------- *
8 * This file is part of OpenFlipper. *
9 * *
10 * OpenFlipper is free software: you can redistribute it and/or modify *
11 * it under the terms of the GNU Lesser General Public License as *
12 * published by the Free Software Foundation, either version 3 of *
13 * the License, or (at your option) any later version with the *
14 * following exceptions: *
15 * *
16 * If other files instantiate templates or use macros *
17 * or inline functions from this file, or you compile this file and *
18 * link it with other files to produce an executable, this file does *
19 * not by itself cause the resulting executable to be covered by the *
20 * GNU Lesser General Public License. This exception does not however *
21 * invalidate any other reasons why the executable file might be *
22 * covered by the GNU Lesser General Public License. *
23 * *
24 * OpenFlipper is distributed in the hope that it will be useful, *
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
27 * GNU Lesser General Public License for more details. *
28 * *
29 * You should have received a copy of the GNU LesserGeneral Public *
30 * License along with OpenFlipper. If not, *
31 * see <http://www.gnu.org/licenses/>. *
32 * *
33 \*===========================================================================*/
34 
35 /*===========================================================================*\
36 * *
37 * $Revision$ *
38 * $LastChangedBy$ *
39 * $Date$ *
40 * *
41 \*===========================================================================*/
42 
43 
44 #pragma once
45 
46 
47 #include <QObject>
48 
52 
53 #include <ACG/GL/IRenderer.hh>
54 #include <ACG/GL/globjects.hh>
55 #include <ACG/GL/FBO.hh>
56 
57 
58 
60 {
61  Q_OBJECT
62  Q_INTERFACES(BaseInterface)
63  Q_INTERFACES(RenderInterface)
64  Q_INTERFACES(LoggingInterface)
65 
66 #if QT_VERSION >= 0x050000
67  Q_PLUGIN_METADATA(IID "org.OpenFlipper.Plugins.Plugin-Render-OITLinkedList")
68 #endif
69 
70 signals:
71  // LoggingInterface
72  void log(Logtype _type, QString _message);
73  void log(QString _message);
74 
75 
76 public:
77  OITLinkedList();
78  ~OITLinkedList();
79 
80  QString name() { return (QString("OITLinkedList")); };
81  QString description( ) { return (QString(tr("Order independent transparency with per pixel linked lists"))); };
82 
83 public slots:
84  QString version() { return QString("1.0"); };
85 
86  QString renderObjectsInfo(bool _outputShaderInfo);
87 
88 private slots:
89 
90  //BaseInterface
91  void initializePlugin();
92  void exit(){}
93 
94  // RenderInterface
95  void render(ACG::GLState* _glState, Viewer::ViewerProperties& _properties);
96  QString rendererName() {return QString("OITLinkedList");}
97  void supportedDrawModes(ACG::SceneGraph::DrawModes::DrawMode& _mode) {_mode = ACG::SceneGraph::DrawModes::DEFAULT;}
98 
99  QString checkOpenGL();
100 
101 
102 private:
103 
104 
105  void prepareBuffers(int w, int h);
106 
107  void renderOIT(int w, int h, bool multisampled);
108 
109 
110 
111  // counter for number of processed fragments
112  ACG::AtomicCounter fragCounter_;
113 
114  // stores start offset into FLBuffer
115  ACG::TextureBuffer startOffsetBuffer_;
116 
117  // ABuffer: per pixel linked list buffer
118  ACG::TextureBuffer ABuffer_;
119 
120 };
121 
122 
QString renderObjectsInfo(bool _outputShaderInfo)
Return a qstring of the current render objects.
QString description()
Return a description of what the plugin is doing.
Interface for all Plugins which do logging to the logging window of the framework.
QString name()
Return a name for the plugin.
Interface class from which all plugins have to be created.
Logtype
Log types for Message Window.
DrawMode DEFAULT
use the default (global) draw mode and not the node's own.
Definition: DrawModes.cc:78
Interface to add additional rendering functions from within plugins.