/*
===========================================================================
Copyright (C) 2010 Jared Prince
This file is part of bsp-renderer source code.
bsp-renderer 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 3 of the License, or
(at your option) any later version.
bsp-renderer 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 bsp-renderer. If not, see .
*/
//|||||||||||||||||||||||||||||||||||||||||||||||
#ifndef OGRE_FRAMEWORK_HPP
#define OGRE_FRAMEWORK_HPP
//|||||||||||||||||||||||||||||||||||||||||||||||
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "OgreGpuCommandBufferFlush.h"
#include "ExampleFrameListener.h"
//#include
//#include
#include
#include
#include
#include
#include
#include "Q3Map.h"
//#include "JarDebug.h" //!! just for debugging, remove from final build
#define CHECKDELETE_ARRAY(x, y) if(x) { delete [] x ; x=0 ; m_nNewCount-- ; m_nNewCheck[y]-- ;}
#define CHECKDELETE_POINTER(x, y) if(x) { delete x ; x=0 ; m_nNewCount-- ; m_nNewCheck[y]-- ;}
enum {
NEW_CHECK_m_pRawBspFile=0,
NEW_CHECK_m_Q3Map,
NEW_CHECK_m_pZoneMO,
NEW_CHECK_m_pZoneMesh,
NEW_CHECK_m_pZoneEntity,
NEW_CHECK_m_pZoneEntityMaterialType,
NEW_CHECK_m_pZoneEntityMaterial_Base,
NEW_CHECK_m_pZoneEntityMaterial_Fast,
NEW_CHECK_m_pZoneEntityMaterial_Black,
NEW_CHECK_m_pZoneEntityMaterial_DfShColour,
NEW_CHECK_m_pZoneEntityMaterial_Shadow,
NEW_CHECK_m_pZoneEntityMaterial_ShadeFront,
NEW_CHECK_m_pZoneEntityMaterial_ShadeBack,
NEW_CHECK_m_pZoneEntityMaterial_DfShPosition,
NEW_CHECK_m_pZoneEntityMaterial_DfShDiffuse,
NEW_CHECK_m_pZoneEntityMaterial_DfShFuncTNB,
NEW_CHECK_m_pZoneEntityMaterial_DfShSpecular,
NEW_CHECK_m_pZoneEntityMaterial_DfShEmissive,
NEW_CHECK_m_pZoneEntityMaterial_DfShMix,
NEW_CHECK_pVertIndex,
NEW_CHECK_m_pEntityInfo,
NEW_CHECK_m_pVisibleEntity,
NEW_CHECK_m_pFrustumEntity,
MAX_NEW_CHECK
} ;
#define MAXFRAME 1000 // debugging/testing, copy out data on a per-frame basis
#define MAXGPUQUERY 4
#define MAXVISIBLELIGHT 128 // most shadow lights ever visible.
#define MAXLIGHTPERLOOP 1 // most shadow lights rendered per deferred shader sub-loop. So shadow lights are rendered in lots of 4// no longer used
#define NEARCLIP 1 // camera default near clip distance
#define FARCLIP 10000 // camera default far clip distance
#define CAMERA_EPSILON 0.000001f // small value to check for up/down cameras that would break with Ogre's fixed Yaw.
#define IGNORE_LIGHT -1
enum GoggleMode
{
GOGGLE_MODE_OFF = 0,
GOGGLE_MODE_TEST,
GOGGLE_MODE_ON,
GOGGLE_MODE_MAX
} ;
#define MAT_OPAQUE 1 // Typical solid stuff. Can have emissive parts.
#define MAT_TRANS 2 // Unused
#define MAT_GLOW 4 // Only rendered in the deferred shader emmisive pass. Used to create the hdr bloom for light points.
#define MAT_GEL 8 // Translucent, colours spotlights that pass through it.
#define MAT_ALPHAPF 16 // Same as MAT_OPAQUE, but with alpha testing.
#define MAT_LAMP 32 // The bounding boxes of deferred shading lights (lamps). Rendered as the last phase in deferred shading.
#define BZN_CONFIG_SIZE 1024
class rQueueListener: public Ogre::RenderQueueListener
{
public:
rQueueListener() {}
~rQueueListener() {}
Ogre::HardwareOcclusionQuery* Query[MAXGPUQUERY] ;
void renderQueueStarted(Ogre::uint8 queueGroupId, const Ogre::String &invocation, bool &skipThisInvocation) {}
void renderQueueEnded(Ogre::uint8 queueGroupId, const Ogre::String &invocation, bool &skipThisInvocation) {}
};
////////////////////////////////////////////////////////////////////////////////////////////////////////
#define MAX_SUBMESH 16 // most submeshes allowed in a mesh.
#define MAX_ZONEPERENTITY 8 // the most zones an entity can touch at once.
#define INDEX_ENTITYZONECOUNT 8 // index to value that holds the count of how many zones this entity touches
#define MAX_LIGHTPERENTITY 64 // most shadowing lights that an entity can be lit by
#define INDEX_LIGHTPERENTITY 64 // index to value
typedef struct
{
int Active ;
int Visible ;
int Frustum ;
int LightTouch ;
int TriangleCount ;
Ogre::Vector3 Postition ;
Ogre::Quaternion Orientation ;
Ogre::AxisAlignedBox AABB ;
Ogre::Vector3 Centre ;
float AABBMin[3] ;
float AABBMax[3] ;
unsigned short Zone[MAX_ZONEPERENTITY+1] ; // the zones this entity touches. Last value is a count of how many zones were touched.
unsigned short Light[MAX_LIGHTPERENTITY+1] ; // the shadow casting spotlights this entity touches. Last value is a count of how many lights.
int MaxSubMesh ;
int SubMeshMaterialType[MAX_SUBMESH] ;
Ogre::Entity* pEnt ;
Ogre::SceneNode* pMasterNode ;
Ogre::MaterialPtr Material_Base[MAX_PROJECTORTEX][MAX_SUBMESH] ;
Ogre::MaterialPtr Material_Fast[MAX_PROJECTORTEX][MAX_SUBMESH] ;
Ogre::MaterialPtr Material_Black[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_DfShColour[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_Shadow[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_ShadeFront[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_ShadeBack[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_DfShPosition[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_DfShDiffuse[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_DfShFuncTNB[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_DfShSpecular[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_DfShEmissive[MAX_SUBMESH] ;
Ogre::MaterialPtr Material_DfShMix[MAX_SUBMESH] ;
}
ENTITYINFO;
typedef struct
{
int Type ;
Ogre::ParticleSystem* PSystem ;
Ogre::SceneNode* PNode ;
}
PARTICLEINFO;
//|||||||||||||||||||||||||||||||||||||||||||||||
class OgreFramework : public Ogre::Singleton, OIS::KeyListener, OIS::MouseListener, public RenderTargetListener
{
public:
OgreFramework();
~OgreFramework();
int m_nNewCount ;
int m_nNewCheck[MAX_NEW_CHECK] ;
int m_nStartTime ;
int m_nTime ;
// CJarDebug OFBug ; //!! just for debugging, remove from final build
char m_chBug[10240] ;
int m_nFrameTime[MAXFRAME][10] ;
int m_nFrame ;
char m_chFrame[1024] ;
int m_nGotInput ;
void initOgre(Ogre::String wndTitle, OIS::KeyListener *pKeyListener = 0, OIS::MouseListener *pMouseListener = 0);
void AdditionalSetup() ;
void updateOgre(double timeSinceLastFrame);
void updateStats();
void moveCamera();
void getInput();
bool isOgreToBeShutDown()const{return m_bShutDownOgre;}
bool keyPressed(const OIS::KeyEvent &keyEventRef);
bool keyReleased(const OIS::KeyEvent &keyEventRef);
bool mouseMoved(const OIS::MouseEvent &evt);
bool mousePressed(const OIS::MouseEvent &evt, OIS::MouseButtonID id);
bool mouseReleased(const OIS::MouseEvent &evt, OIS::MouseButtonID id);
Ogre::Root* m_pRoot;
Ogre::SceneManager* m_pSceneMgr;
Ogre::RenderWindow* m_pRenderWnd;
Ogre::Camera* m_pCamera;
Ogre::Viewport* m_pViewport;
Ogre::Log* m_pLog;
Ogre::Timer* m_pTimer;
Ogre::Camera* m_pCameraCopy ;
Ogre::Camera* m_pCameraNoJitter ;
float m_flAspectRatio ;
float m_flFOV ;
//RawFilePtr m_pRawBspFile ; bool m_bRawBspFileIsLoaded ;
char *m_pRawBspFile ;
bool m_bRawBspFileIsLoaded ;
OIS::InputManager* m_pInputMgr;
OIS::Keyboard* m_pKeyboard;
OIS::Mouse* m_pMouse;
int nMap ;
Ogre::String m_MapName ;
int m_nLoadToggle ;
int m_nJumpToggle ;
int m_nJumpVal;
int m_nToggle ;
void UnloadMap(bool bShutdown) ;
int LoadMap(void) ;
int m_nMapLoaded ;
int m_nDebugLightBox ;
int m_nZoneCullingActive ;
int m_nPortalDebug ;
int m_nPortalToggle ;
int m_nPortalState ;
// Add this to OgreFramework and initialize it from 0 to MAXGPUQUERY
// If you're good you'll make it private and add some get/set functions,
// I just made it public for now.
// A value of 0 means don't mess with the GPU buffers at all. There
// might be some systems where the queries cause problems, so let the user
// deactivate the queries completely if desired.
// A value of 1 means we flush every frame, so no GPU command buffering.
// This is good for low FPS because even just 1 buffer gives noticable
// input lag. However users with high FPS can afford a few buffers.
int m_nMaxGPUQuery ;
int m_nDebugA ;
int m_nDebugB ;
int m_nDebugC ;
int m_nVisibleLightCount ;
int m_nVisibleZoneCount ;
float m_flDebugMatrix[4][4] ;
int m_nRecurseCount ;
char m_chDebug[10240] ;
float m_flDebug0 ;
float m_flDebug1 ;
float m_flDebug2 ;
float m_flDebug3 ;
float m_flDebug4 ;
float m_flDebug5 ;
Ogre::ManualObject* m_pGoggleL ;
Ogre::ManualObject* m_pGoggleR ;
Ogre::SceneNode* m_pNodeGoggles ;
int m_nGoggleMode ;
float m_flGoggleAspectRatio ;
float m_flGoggleZPos ;
float m_flGoggleXGap ;
float m_flGoggleXScale ;
float m_flGoggleYScale ;
int m_nGoggleTestImage ;
void DestroyGoggles() ;
int CreateGogglesTestImage() ;
int CreateGoggles() ;
void UpdateRenderTargets() ;
double m_GameTime ;
char m_chBZNConfig[BZN_CONFIG_SIZE] ;
void ParseBZNConfig(void) ;
void FinalShutdown(void) ;
private:
OgreFramework(const OgreFramework&);
OgreFramework& operator= (const OgreFramework&);
Ogre::Overlay* m_pDebugOverlay;
Ogre::Overlay* m_pInfoOverlay;
int m_iNumScreenShots;
bool m_bShutDownOgre;
Ogre::Vector3 m_TranslateVector;
Ogre::Real m_MoveSpeed;
Ogre::Degree m_RotateSpeed;
float m_MoveScale;
Ogre::Degree m_RotScale;
int m_nKeyDown_Shift ;
int m_nKeyDown_Ctrl ;
//RawFileManager *mRawFileManager;
char* m_TempMem ;
Q3Map *m_Q3Map;
Ogre::SceneNode* m_pCubeNode;
Ogre::Entity* m_pCubeEntity;
Ogre::SceneNode *m_pOpaqueNode[MAX_ZONE] ;
int m_nOpaqueNodeUsed[MAX_ZONE] ;
Ogre::SceneNode *m_pTransNode[MAX_ZONE] ;
int m_nTransNodeUsed[MAX_ZONE] ;
Ogre::SceneNode *m_pLampNode[MAX_ZONE] ;
int m_nLampNodeUsed[MAX_ZONE] ;
Ogre::SceneNode *m_pGlowNode[MAX_ZONE] ;
int m_nGlowNodeUsed[MAX_ZONE] ;
Ogre::Matrix4 m_ViewMatrix ;
Ogre::Matrix4 m_ProjectionMatrix ;
Ogre::ManualObject** m_pZoneMO ; // the Zone's manualObject array
Ogre::MeshPtr* m_pZoneMesh ;
Ogre::Entity** m_pZoneEntity ;
int* m_pZoneEntityMaterialType ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_Base[MAX_PROJECTORTEX] ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_Fast[MAX_PROJECTORTEX] ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_Black ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_DfShColour ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_Shadow ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_ShadeFront ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_ShadeBack ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_DfShPosition ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_DfShDiffuse ;
//Ogre::MaterialPtr* m_pZoneEntityMaterial_DSNormal ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_DfShFuncTNB ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_DfShSpecular ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_DfShEmissive ;
//Ogre::MaterialPtr* m_pZoneEntityMaterial_DfShData ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_DfShMix ;
Ogre::MaterialPtr* m_pZoneEntityMaterial_BlurA ;
/////////////////////////////////////////////////////////////////////////////////
Ogre::MeshPtr* m_pGameMesh ;
ENTITYINFO* m_pEntityInfo ;
int* m_pVisibleEntity ; // entities that are in a visible zone
int* m_pFrustumEntity ; // entities that are in a visible zone and also in the view frustum
int m_nMaxGameMesh ;
int m_nMaxEntity ;
int m_nMaxVisibleEntity ;
int m_nMaxFrustumEntity ;
int m_nVisibleEntityTriangleCount ;
int m_nFrustumEntityTriangleCount ;
int m_nTotalTriangles ;
int m_nZoneTriangleCount[MAX_ZONE] ;
/////////////////////////////////////////////////////////////////////////////////
// for debugging/testing, make light volumes into meshes
Ogre::ManualObject** m_pLightMO ; // the manualObject array
int AddLightCullingBoxes(void) ;
// for debugging/testing, make portal volumes into meshes
Ogre::ManualObject** m_pPortalMO ; // the manualObject array
Ogre::Node** m_pPortalNode ; // the node of this portal
int AddPortalBoxes(void) ;
/////////////////////////////////////////////////////////////////////////////////
void SetupResourceLocations() ;
float m_flStereoFrustumTweak ; // in stereoscopic mode the portal frustums might be too tight, so enlarge them a bit.
bool m_IsOpenGL ;
void initLight() ;
Ogre::Matrix4 CreateTextureViewProjectionMatrix(Ogre::Camera* pCamera) ;
bool SetupSingleVisibleLightAndShadowCamera(int nLt, char* pLightVis, unsigned short* pVisibleLightList, Ogre::Camera* pCamera) ;
int SetupParticles() ;
Ogre::ParticleSystem* m_ps;
Ogre::SceneNode* m_pParticleNode;
int m_nMaxParticleSystem ;
int ConstructMapFromTriangles(void) ;
int SetupGameEntities(void) ;
int SetupEntity(int nEntity, char *chMeshName) ;
int m_nKeyToggle[OIS::KC_MEDIASELECT+1] ; // for preventing multiple key triggers when needed.
int m_nFlashLight ;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// left/mono visibility info
char m_chZoneVisL[MAX_ZONE] ;
char m_chLightVisL[MAX_LIGHT] ;
char m_chSubLightVisL[MAX_SUBLIGHT] ;
char m_chPortalVisL[MAX_PORTAL] ;
int m_nMaxVisibleZoneL ;
unsigned short m_uVisibleZoneListL[MAX_ZONE] ; // if MAX_ZONE goes above 65536 this will need to change to an int
int m_nMaxVisibleLightL ;
unsigned short m_uVisibleLightListL[MAXVISIBLELIGHT]; // if MAX_LIGHT goes above 65536 this will need to change to an int
int m_nCameraZoneL ; // zone player left eye is in.
// right visibility info
char m_chZoneVisR[MAX_ZONE] ;
char m_chLightVisR[MAX_LIGHT] ;
char m_chSubLightVisR[MAX_SUBLIGHT] ;
char m_chPortalVisR[MAX_PORTAL] ;
int m_nMaxVisibleZoneR ;
unsigned short m_uVisibleZoneListR[MAX_ZONE] ; // if MAX_ZONE goes above 65536 this will need to change to an int
int m_nMaxVisibleLightR ;
unsigned short m_uVisibleLightListR[MAXVISIBLELIGHT]; // if MAX_LIGHT goes above 65536 this will need to change to an int
int m_nCameraZoneR ; // zone player right eye is in.
int m_nCameraZone ; // zone player is in.
char* m_pGlobal_ZoneVis ;
char* m_pGlobal_LightVis ;
unsigned short* m_pGlobal_VisibleZoneList ;
int* m_pGlobal_MaxVisibleZone ;
unsigned short* m_pGlobal_VisibleLightList ;
int* m_pGlobal_MaxVisibleLight ;
char m_chPortalState[MAX_PORTAL] ;
int m_nMaxVisibleLight ;
int m_nZoneMOStart[MAX_ZONE+1] ; // index into m_pZoneMO for each zone, since each material within a zone is another manualObject.
void CalculateZoneVisibility(Ogre::Camera* pCamera, int *pCameraZone, char* pZoneVis, char* pLightVis, char* pSubLightVis, char* pPortalVis, int* pMaxVisibleLight, unsigned short* pVisibleLightList) ;
void SetupEntityZones(void) ;
void CalculateEntityVisibility(Ogre::Camera* pCamera, char* pZoneVis) ;
void SetAllLightsOff(void) ;
void SetSingleVisibleLight(int nLt, bool bOn) ;
void UpdateVisibleZoneList(char* pZoneVis, unsigned short* pVisibleZoneList, int* pMaxVisibleZone) ;
void SetZoneNodeAttachments(unsigned short* pVisibleZoneList, int* pMaxVisibleZone, int nMaterialFlags) ;
void SetZoneNodeAttachments(unsigned short* pVisibleZoneList, int* pMaxVisibleZone, int nMaterialFlags, int nLight) ;
bool LightTouchesZone(int nLight, int nZone) ;
void PortalScan(Ogre::Camera *pCamera, int nZone, Ogre::Real ScaleX, Ogre::Real ScaleY, char* pZoneVis, char* pLightVis, char* pSubLightVis, char* pPortalVis, int* pMaxVisibleLight, unsigned short* pVisibleLightList) ;
int m_nOriginalZoneOpenPortals ;
void CheckMultiZoneLights(int nCameraZone, char* pZoneVis, char* pLightVis, char* pSubLightVis) ;
void AddZonesFromMultiZoneLights(char* pZoneVis, char* pLightVis, char* pSubLightVis) ;
int CalculatePortalFrustum(Ogre::Camera *pCamera, int nPortal, Ogre::Real* pPortalL, Ogre::Real* pPortalR, Ogre::Real* pPortalT, Ogre::Real* pPortalB, Ogre::Real ScaleX, Ogre::Real ScaleY) ;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//int ApplyCGDefines(void) ;
int m_nSpeedRender ;
int m_nRenderHDR ;
int m_nColouredShadow ;
int m_nShadowMapSize ;
int m_nShadowRGBSize ;
int m_nDisplayInfoMode ;
///////////////////////////////////////////////////////////////////////////////////////////
// render to texture quasi-deferred shading stuff
void CreateRTTAssets() ;
void DestroyRTTAssets() ;
int m_nRTTAssetsExist ;
// Shadow
Rectangle2D* miniScreen_Shadow;
Ogre::SceneNode* miniScreenNode_Shadow;
Ogre::TexturePtr RTT_Texture_Shadow ;
Ogre::RenderTexture* renderTexture_Shadow ;
Ogre::MaterialPtr RTT_Mat_Shadow ;
Ogre::Technique* RTT_Technique_Shadow ;
// ShadeFront
Rectangle2D* miniScreen_ShadeFront;
Ogre::SceneNode* miniScreenNode_ShadeFront;
Ogre::TexturePtr RTT_Texture_ShadeFront ;
Ogre::RenderTexture* renderTexture_ShadeFront ;
Ogre::MaterialPtr RTT_Mat_ShadeFront ;
Ogre::Technique* RTT_Technique_ShadeFront ;
// ShadeBack
Rectangle2D* miniScreen_ShadeBack;
Ogre::SceneNode* miniScreenNode_ShadeBack;
Ogre::TexturePtr RTT_Texture_ShadeBack ;
Ogre::RenderTexture* renderTexture_ShadeBack ;
Ogre::MaterialPtr RTT_Mat_ShadeBack ;
Ogre::Technique* RTT_Technique_ShadeBack ;
// DfShPosition
Rectangle2D* miniScreen_DfShPosition;
SceneNode* miniScreenNode_DfShPosition;
TexturePtr RTT_Texture_DfShPosition ;
RenderTexture* renderTexture_DfShPosition ;
MaterialPtr RTT_Mat_DfShPosition ;
Technique* RTT_Technique_DfShPosition ;
RenderTargetListener* Listener_DfShPosition ;
// DfShDiffuse
Rectangle2D* miniScreen_DfShDiffuse;
Ogre::SceneNode* miniScreenNode_DfShDiffuse;
Ogre::TexturePtr RTT_Texture_DfShDiffuse ;
Ogre::RenderTexture* renderTexture_DfShDiffuse ;
Ogre::MaterialPtr RTT_Mat_DfShDiffuse ;
Ogre::Technique* RTT_Technique_DfShDiffuse ;
/*
// DSNormal // UNUSED
Rectangle2D* miniScreen_DSNormal;
Ogre::SceneNode* miniScreenNode_DSNormal;
Ogre::TexturePtr RTT_Texture_DSNormal ;
Ogre::RenderTexture* renderTexture_DSNormal ;
Ogre::MaterialPtr RTT_Mat_DSNormal ;
Ogre::Technique* RTT_Technique_DSNormal ;
*/
// DfShFuncTNB
Rectangle2D* miniScreen_DfShFuncTNB;
Ogre::SceneNode* miniScreenNode_DfShFuncTNB;
Ogre::TexturePtr RTT_Texture_DfShFuncTNB ;
Ogre::RenderTexture* renderTexture_DfShFuncTNB ;
Ogre::MaterialPtr RTT_Mat_DfShFuncTNB ;
Ogre::Technique* RTT_Technique_DfShFuncTNB ;
// DfShSpecular
Rectangle2D* miniScreen_DfShSpecular;
Ogre::SceneNode* miniScreenNode_DfShSpecular;
Ogre::TexturePtr RTT_Texture_DfShSpecular ;
Ogre::RenderTexture* renderTexture_DfShSpecular ;
Ogre::MaterialPtr RTT_Mat_DfShSpecular ;
Ogre::Technique* RTT_Technique_DfShSpecular ;
// DfShEmissive
Rectangle2D* miniScreen_DfShEmissive;
Ogre::SceneNode* miniScreenNode_DfShEmissive;
Ogre::TexturePtr RTT_Texture_DfShEmissive ;
Ogre::RenderTexture* renderTexture_DfShEmissive ;
Ogre::MaterialPtr RTT_Mat_DfShEmissive ;
Ogre::Technique* RTT_Technique_DfShEmissive ;
// DfShLamp
Rectangle2D* miniScreen_DfShLamp;
Ogre::SceneNode* miniScreenNode_DfShLamp;
Ogre::TexturePtr RTT_Texture_DfShLamp ;
Ogre::RenderTexture* renderTexture_DfShLamp ;
Ogre::MaterialPtr RTT_Mat_DfShLamp ;
Ogre::Technique* RTT_Technique_DfShLamp ;
/*
// DfShData
Rectangle2D* miniScreen_DfShData;
Ogre::SceneNode* miniScreenNode_DfShData;
Ogre::TexturePtr RTT_Texture_DfShData ;
Ogre::RenderTexture* renderTexture_DfShData ;
Ogre::MaterialPtr RTT_Mat_DfShData ;
Ogre::Technique* RTT_Technique_DfShData ;
*/
// DfShMix
Rectangle2D* miniScreen_DfShMix;
Ogre::SceneNode* miniScreenNode_DfShMix;
Ogre::TexturePtr RTT_Texture_DfShMix ;
Ogre::RenderTexture* renderTexture_DfShMix ;
Ogre::MaterialPtr RTT_Mat_DfShMix ;
Ogre::Technique* RTT_Technique_DfShMix ;
// DfShTemp
Rectangle2D* miniScreen_DfShTemp;
Ogre::SceneNode* miniScreenNode_DfShTemp;
Ogre::TexturePtr RTT_Texture_DfShTemp ;
Ogre::RenderTexture* renderTexture_DfShTemp ;
Ogre::MaterialPtr RTT_Mat_DfShTemp ;
Ogre::Technique* RTT_Technique_DfShTemp ;
Rectangle2D* miniScreen_DfShMaster;
Ogre::SceneNode* miniScreenNode_DfShMaster;
int m_nRTTWidth ;
int m_nRTTHeight ;
// blur for hdr
Rectangle2D* miniScreen_BlurA;
Ogre::SceneNode* miniScreenNode_BlurA;
Ogre::TexturePtr RTT_Texture_BlurA ;
Ogre::RenderTexture* renderTexture_BlurA ;
Ogre::MaterialPtr RTT_Mat_BlurA ;
Ogre::Technique* RTT_Technique_BlurA ;
Rectangle2D* miniScreen_BlurB;
Ogre::SceneNode* miniScreenNode_BlurB;
Ogre::TexturePtr RTT_Texture_BlurB ;
Ogre::RenderTexture* renderTexture_BlurB ;
Ogre::MaterialPtr RTT_Mat_BlurB ;
Ogre::Technique* RTT_Technique_BlurB ;
Ogre::MaterialPtr pClearMaterial ;
};
//|||||||||||||||||||||||||||||||||||||||||||||||
#endif
//|||||||||||||||||||||||||||||||||||||||||||||||