/*===========================================================================*\ * * * OpenFlipper * * Copyright (C) 2001-2011 by Computer Graphics Group, RWTH Aachen * * www.openflipper.org * * * *--------------------------------------------------------------------------- * * This file is part of OpenFlipper. * * * * OpenFlipper is free software: you can redistribute it and/or modify * * it under the terms of the GNU Lesser General Public License as * * published by the Free Software Foundation, either version 3 of * * the License, or (at your option) any later version with the * * following exceptions: * * * * If other files instantiate templates or use macros * * or inline functions from this file, or you compile this file and * * link it with other files to produce an executable, this file does * * not by itself cause the resulting executable to be covered by the * * GNU Lesser General Public License. This exception does not however * * invalidate any other reasons why the executable file might be * * covered by the GNU Lesser General Public License. * * * * OpenFlipper is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU Lesser General Public License for more details. * * * * You should have received a copy of the GNU LesserGeneral Public * * License along with OpenFlipper. If not, * * see . * * * \*===========================================================================*/ /*===========================================================================*\ * * * $Revision$ * * $LastChangedBy$ * * $Date$ * * * \*===========================================================================*/ #ifndef RENDERINTERFACE_HH #define RENDERINTERFACE_HH #include #include /** \file RenderInterface.hh * * Interface for adding global rendering functions. \ref renderInterfacePage */ /** \brief Interface to add additional rendering functions from within plugins. * * \ref renderInterfacePage "Detailed description" * \n * \n * * Interface for adding and controlling rendering functions from a plugin.\n */ class RenderInterface { public: /// Destructor virtual ~RenderInterface() {}; private slots: /** \brief announce required draw modes * * This function is called by the core to get a list of draw modes that are supported * by this renderer. If such a draw mode is set and the currently active * renderer does not support the given mode, the core will switch to * this renderer automatically. If there are multiple renderers capable of rendering * the drawmode(s), the core will ask the user for its preference. * * @param _mode Combined list of drawmodes */ virtual void supportedDrawModes(ACG::SceneGraph::DrawModes::DrawMode& _mode) = 0; /** \brief announce name for the rendering function * * * @param _name displayed name of the rendering function */ virtual QString rendererName() = 0; public slots: /** \brief rendering function * * Implement this function to render the scene. You have to traverse the * scenegraph in this function. The glContext is made current before this * call. * If you need to initialize something,you can do it within this function. * gl and glew are already setUp here. */ virtual void render(ACG::GLState* _glState, Viewer::ViewerProperties& _properties) {}; /** \brief Return options menu * * If you want an options Menu or menu entry, you can return your action here. * It will be shown on top of the renderer list in the options menu. * * * @return Action for a menu or menu entry */ virtual QAction* optionsAction() { return 0; }; }; /** \page renderInterfacePage Render Interface \image html RenderInterface.png \n The RenderInterface can be used by plugins to add special rendering functions to OpenFlipper. You can create a dedicated rendering function for a drawmode. E.g. when you need to render 4 passes with different shaders you can do that in your rendering function. Example Code for functions: \code TODO \endcode To use the RenderInterface:
  • include RenderInterface.hh in your plugins header file
  • derive your plugin from the class RenderInterface
  • add Q_INTERFACES(RenderInterface) to your plugin class
  • And add the signals or slots you want to use to your plugin class (You don't need to implement all of them)
*/ Q_DECLARE_INTERFACE(RenderInterface,"OpenFlipper.RenderInterface/1.0") #endif // RPCINTERFACE_HH