PCMRendererPlugin.h

Go to the documentation of this file.
00001 
00002 //
00003 // This source file is a part of ParCompMark
00004 // Parallel Compositing Benchmark Framework
00005 //
00006 // for latest info see http://parcompmark.sourceforge.net
00007 
00008 //
00009 // Copyright (C) 2006 IT2 ParCompMark Dev. Team
00010 // 
00011 // This program is free software; you can redistribute it and/or
00012 // modify it under the terms of the GNU General Public License
00013 // as published by the Free Software Foundation; either version 2
00014 // of the License, or (at your option) any later version.
00015 // 
00016 // This program is distributed in the hope that it will be useful,
00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00019 // GNU General Public License for more details.
00020 // 
00021 // You should have received a copy of the GNU General Public License
00022 // along with this program; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00024 
00027 
00028 #ifndef __PCM_RENDERERPLUGIN_H__
00029 #  define __PCM_RENDERERPLUGIN_H__
00030 
00031 //
00032 // Inner includes
00033 //
00034 
00035 #  include "PCMPremeditations.h"
00036 
00037 #  include "PCMPlugin.h"
00038 
00039 #  include "PCMException.h"
00040 
00041 #  include "PCMLogger.h"
00042 
00043 #  include "PCMPointer.h"
00044 
00045 #  include "PCMGLXRenderWindow.h"
00046 
00047 #  include "PCMStringConverter.h"
00048 
00049 //
00050 // Outer includes
00051 //
00052 
00053 #  include <X11/Xlib.h>
00054 
00055 #  include <GL/glew.h>
00056 
00057 #  include <GL/glx.h>
00058 
00059 #  include <list>
00060 
00061 namespace ParCompMark
00062 {
00063 
00068   class RendererPlugin:public Plugin
00069   {
00070 
00071         //
00072         // Unit test class
00073         //
00074 #  ifdef PARCOMPMARK_TEST
00075         friend class ParCompMarkTest::TestRendererPlugin;
00076 #  endif
00077 
00078         //
00079         // Typedefs
00080         //
00081 
00082    public:
00083 
00085         typedef struct
00086         {
00087          unsigned left;
00088          unsigned top;
00089          unsigned width;
00090 
00091          unsigned height;                                                                        
00092          unsigned char *colour;
00093         } PluginBuffer;
00094 
00096         typedef ParCompMark::Pointer < RendererPlugin,
00097         Mutex > Pointer;
00098 
00100         typedef int (*pcmSetMiscParamType) (void *, const char *, const char *);
00101 
00103         typedef int (*pcmSetObjectSpaceBoundingBoxType) (void *, double, double, double, double, double, double);
00104 
00106         typedef int (*pcmregisterObjectSpaceBoundingBoxType) (void *, double, double, double, double, double, double);
00107 
00109         typedef int (*pcmSetObjectIdType) (void *, unsigned);
00110 
00112         typedef int (*pcmSetScreenSpaceFrameletType) (void *, double, double, double, double);
00113 
00115         typedef int (*pcmOnResizeType) (void *, unsigned, unsigned);
00116 
00118         typedef int (*pcmGetSortOrderType) (void *);
00119 
00121         typedef int (*pcmOnRenderType) (void *, double, unsigned);
00122 
00123    protected:
00124 
00126         typedef void (*bufferGetterType) (const void *, const char *, void *);
00127 
00129         typedef const char **(*pcmGetNeededOpenGLExtsType) ();
00130 
00132         typedef void *(*pcmOnCreateRendererType) (void *, Display *, Window, XVisualInfo *, GLXContext);
00133 
00135         typedef int (*pcmOnDestroyRendererType) (void *);
00136 
00138         typedef int (*pcmSetBufferGetterType) (bufferGetterType);
00139 
00140         //
00141         // Variables
00142         //
00143 
00145 
00146 
00147    protected:
00148 
00154         std::list < std::string > mNeededOpenGLExts;
00155 
00161         RendererPlugin::pcmOnResizeType mPcmOnResize;
00162 
00168         RendererPlugin::pcmGetSortOrderType mPcmGetSortOrder;
00169 
00175         RendererPlugin::pcmOnRenderType mPcmOnRender;
00176 
00178 
00179         //
00180         // Constructors & destructor
00181         //
00182 
00184 
00185 
00186    public:
00187 
00194         RendererPlugin(const Plugin::PluginType & type, const std::string & name,
00195                          const std::string & filename);
00196 
00200         virtual ~ RendererPlugin();
00201 
00203 
00204         //
00205         // Getters & setters
00206         //
00207 
00209 
00210 
00211    public:
00212 
00218         const std::list < std::string > &getNeededOpenGLExts() const;
00219 
00221 
00222         //
00223         // Class methods
00224         //
00225 
00227 
00228 
00229    protected:
00230 
00244         static void _bufferGetter(const void *pRenderer, const char *bufferName, void *pBufferData);
00245 
00247 
00248         //
00249         // Methods
00250         //
00251 
00253 
00254 
00255    public:
00256 
00263         virtual Renderer * createRenderer(GLXRenderWindow::Pointer window, OpenGLRenderingEngine * parent);
00264 
00269         virtual void destroyRenderer(Renderer * renderer);
00270 
00277         virtual void resize(void *rendererHandle, const u32 & width, const u32 & height);
00278 
00284         virtual s32 getSortOrder(void *rendererHandle);
00285 
00292         virtual void render(void *rendererHandle, const double &time, const unsigned &frame);
00293 
00300         virtual void setMiscParam(void *rendererHandle, const char *&name, const char *&value);
00301 
00312         virtual void setObjectSpaceBoundingBox(void *rendererHandle, const double &x0, const double &y0,
00313                                            const double &z0, const double &x1, const double &y1,
00314                                            const double &z1);
00315 
00321         virtual void setObjectId(void *rendererHandle, const unsigned &objectId);
00322 
00331         virtual void setScreenSpaceFramelet(void *rendererHandle, const double &u0, const double &v0,
00332                                          const double &u1, const double &v1);
00333 
00344         virtual void registerObjectSpaceBoundingBox(void *rendererHandle, const double &x0,
00345                                                  const double &y0, const double &z0,
00346                                                  const double &x1, const double &y1,
00347                                                  const double &z1);
00348 
00349    protected:
00350 
00354         virtual void _initializeSpecific();
00355 
00359         virtual void _finalizeSpecific();
00360 
00364         virtual void _setBufferGetter();
00365 
00369         virtual void _getNeededOpenGLExts();
00370 
00374         virtual void _initFastFunctions();
00375 
00377 
00378   };
00379 
00380   //
00381   // Include header implementation
00382   //
00383 
00384 #  include "PCMRendererPlugin_impl.h"
00385 
00386 }
00387 
00388 #endif