blender/source/gameengine/Rasterizer/RAS_IRenderTools.h
Dalai Felinto 0cad3ae24c BGE 2D Filters: filters run per scene now (fix for [#18152]) - it (slightly) breaks backward compatibility !!!
Originally we had 2DFilters (m_filtermanager) stored in RenderTools. That way filters were stored globally and were being called once per each scene. This was producing two big problems: (1) performance and (2) flexibility of use.

(1) Performance - To run the filters 2X == 2X slower
(2) flexibility of use - Very often we want the filter in the scene but not in the UI for example.

For those reasons I believe that 2DFilters with multiple scenes was very useless or unpredictable. I hope they work fine now.
To make it work as before (2.4) you can simply recreate the 2dfilter actuators across the scenes.

* * * * *

Imagine that we have:
(a) Main Scene
(b) Overlay Scene

in Main Scene the Z Buffer and RGB will be from the main scene.
in Overlay Scene the Z Buffer will be from the Overlay Scene and the RBG buffer is from both [(a + 2D Filter) + b].

So in pseudo code if we have a,b,c,d,e scenes we have: (2DFilterE(2DFilterD(2DFilterC(2DFilterB(2DFilterA(a) + b) + c) + d) + e)
2010-03-03 06:38:47 +00:00

192 lines
3.5 KiB
C++

/**
* $Id$
*
* ***** BEGIN GPL LICENSE BLOCK *****
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): none yet.
*
* ***** END GPL LICENSE BLOCK *****
*/
#ifndef __RAS_IRENDERTOOLS
#define __RAS_IRENDERTOOLS
#include "MT_Transform.h"
#include "RAS_IRasterizer.h"
#include "RAS_2DFilterManager.h"
#include <vector>
#include <algorithm>
#ifdef WITH_CXX_GUARDEDALLOC
#include "MEM_guardedalloc.h"
#endif
class RAS_IPolyMaterial;
struct RAS_LightObject;
class RAS_IRenderTools
{
protected:
void* m_clientobject;
void* m_auxilaryClientInfo;
std::vector<struct RAS_LightObject*> m_lights;
RAS_2DFilterManager m_filtermanager;
public:
enum RAS_TEXT_RENDER_MODE {
RAS_TEXT_RENDER_NODEF = 0,
RAS_TEXT_NORMAL,
RAS_TEXT_PADDED,
RAS_TEXT_MAX
};
RAS_IRenderTools(
) :
m_clientobject(NULL)
{
};
virtual
~RAS_IRenderTools(
) {};
virtual
void
BeginFrame(
RAS_IRasterizer* rasty
)=0;
virtual
void
EndFrame(
RAS_IRasterizer* rasty
)=0;
// the following function was formerly called 'Render'
// by it doesn't render anymore
// It only sets the transform for the rasterizer
// so must be renamed to 'applyTransform' or something
virtual
void
applyTransform(
class RAS_IRasterizer* rasty,
double* oglmatrix,
int drawingmode
)=0;
/**
* Renders 2D text string.
* @param mode The type of text
* @param text The string to render.
* @param xco Position on the screen (origin in lower left corner).
* @param yco Position on the screen (origin in lower left corner).
* @param width Width of the canvas to draw to.
* @param height Height of the canvas to draw to.
*/
virtual
void
RenderText2D(
RAS_TEXT_RENDER_MODE mode,
const char* text,
int xco,
int yco,
int width,
int height
) = 0;
// 3d text, mapped on polygon
virtual
void
RenderText(
int mode,
RAS_IPolyMaterial* polymat,
float v1[3],
float v2[3],
float v3[3],
float v4[3],
int glattrib
)=0;
virtual
void
ProcessLighting(
RAS_IRasterizer *rasty,
bool uselights,
const MT_Transform& trans
)=0;
virtual
void
SetClientObject(
RAS_IRasterizer* rasty,
void* obj
);
void
SetAuxilaryClientInfo(
void* inf
);
virtual
void
PushMatrix(
)=0;
virtual
void
PopMatrix(
)=0;
virtual
void
AddLight(
struct RAS_LightObject* lightobject
);
virtual
void
RemoveLight(
struct RAS_LightObject* lightobject
);
virtual
void
MotionBlur(RAS_IRasterizer* rasterizer)=0;
#ifdef WITH_CXX_GUARDEDALLOC
public:
void *operator new( unsigned int num_bytes) { return MEM_mallocN(num_bytes, "GE:RAS_IRenderTools"); }
void operator delete( void *mem ) { MEM_freeN(mem); }
#endif
};
#endif //__RAS_IRENDERTOOLS