lugre_rendertexture_L.cpp
Go to the documentation of this file.00001 #include "lugre_prefix.h"
00002 #include "lugre_luabind.h"
00003 #include "lugre_ogrewrapper.h"
00004 #include "lugre_rendertexture.h"
00005 #include "lugre_camera.h"
00006 #include <Ogre.h>
00007
00008 extern "C" {
00009 #include "lua.h"
00010 #include "lauxlib.h"
00011 #include "lualib.h"
00012 }
00013
00014
00015 using namespace Ogre;
00016
00017
00018 namespace Lugre {
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 cRenderTexture::cRenderTexture (Ogre::RenderTarget* pRenderTarget) : mbListener(false), mpRenderTarget(pRenderTarget) {}
00031
00032 cRenderTexture::~cRenderTexture() {
00033
00034 if (mpRenderTarget) mpRenderTarget = 0;
00035 DisableListener();
00036 }
00037
00038
00039 void cRenderTexture::preRenderTargetUpdate(const RenderTargetEvent& evt)
00040 {
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 mPre.SimpleCall();
00051 }
00052
00053
00054 void cRenderTexture::postRenderTargetUpdate (const RenderTargetEvent& evt)
00055 {
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 mPost.SimpleCall();
00066 }
00067
00068 void cRenderTexture::DisableListener (){ PROFILE
00069 if(mbListener){
00070 mbListener = false;
00071 mpRenderTarget->removeListener(this);
00072 }
00073 }
00074
00075 void cRenderTexture::EnableListener (){ PROFILE
00076 if(!mbListener){
00077 mbListener = true;
00078 mpRenderTarget->addListener(this);
00079 }
00080 }
00081
00082 class cRenderTexture_L : public cLuaBind<cRenderTexture> { public:
00084 virtual void RegisterMethods (lua_State *L) { PROFILE
00085 #define REGISTER_METHOD(methodname) mlMethod.push_back(make_luaL_reg(#methodname,&cRenderTexture_L::methodname));
00086 REGISTER_METHOD(Destroy);
00087 REGISTER_METHOD(SetAutoUpdated);
00088 REGISTER_METHOD(Update);
00089 REGISTER_METHOD(WriteContentsToFile);
00090
00091 REGISTER_METHOD(SetPrePostFunctions);
00092 REGISTER_METHOD(DisablePrePostFunctions);
00093 REGISTER_METHOD(EnablePrePostFunctions);
00094
00095 lua_register(L,"CreateRenderTexture", &cRenderTexture_L::CreateRenderTexture);
00096 }
00097
00098
00099
00101 static int Destroy (lua_State *L) { PROFILE delete checkudata_alive(L); return 0; }
00102
00103
00104
00106
00107
00108
00109
00110
00111
00112
00113
00114
00116 static int SetAutoUpdated (lua_State *L) { PROFILE
00117 cRenderTexture* target = checkudata_alive(L);
00118 if (target->mpRenderTarget) target->mpRenderTarget->setAutoUpdated(lua_toboolean(L,1));
00119 return 0;
00120 }
00121
00122
00127 static int SetPrePostFunctions (lua_State *L) { PROFILE
00128 cRenderTexture* target = checkudata_alive(L);
00129 target->mPre.assign(L, 2);
00130 target->mPost.assign(L, 3);
00131 target->EnableListener();
00132 return 0;
00133 }
00134
00136 static int DisablePrePostFunctions (lua_State *L) { PROFILE
00137 checkudata_alive(L)->DisableListener();
00138 return 0;
00139 }
00140
00142 static int EnablePrePostFunctions (lua_State *L) { PROFILE
00143 checkudata_alive(L)->EnableListener();
00144 return 0;
00145 }
00146
00148 static int Update (lua_State *L) { PROFILE
00149 cRenderTexture* target = checkudata_alive(L);
00150 if (target->mpRenderTarget) target->mpRenderTarget->update();
00151 return 0;
00152 }
00153
00155 static int WriteContentsToFile (lua_State *L) { PROFILE
00156 cRenderTexture* target = checkudata_alive(L);
00157 if (target->mpRenderTarget) {
00158 std::string sFileName = luaL_checkstring(L,2);
00159
00160 target->mpRenderTarget->writeContentsToFile(sFileName);
00161 }
00162 return 0;
00163 }
00164
00165
00166
00169 static int CreateRenderTexture (lua_State *L) { PROFILE
00170 std::string sRTTName = (lua_gettop(L) >= 1 && !lua_isnil(L,1)) ? luaL_checkstring(L,1) : cOgreWrapper::GetSingleton().GetUniqueName();
00171 int iCX = luaL_checkint(L,2);
00172 int iCY = luaL_checkint(L,3);
00173 Ogre::PixelFormat pixelformat = (lua_gettop(L) >= 4 && !lua_isnil(L,4)) ? ((Ogre::PixelFormat)luaL_checkint(L,4)) : Ogre::PF_BYTE_RGBA;
00174
00175 Ogre::RenderTarget* pRenderTarget = 0;
00176 try {
00177 Ogre::TexturePtr texture = Ogre::TextureManager::getSingleton().createManual(sRTTName,
00178 Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, Ogre::TEX_TYPE_2D,
00179 iCX, iCY, 0, pixelformat, Ogre::TU_RENDERTARGET );
00180 pRenderTarget = texture->getBuffer()->getRenderTarget();
00181
00182 } catch (...) {
00183
00184
00185
00186 }
00187 cRenderTexture* target = pRenderTarget ? new cRenderTexture(pRenderTarget) : 0;
00188 return CreateUData(L,target);
00189 }
00190
00191 virtual const char* GetLuaTypeName () { return "lugre.RenderTexture"; }
00192 };
00193
00195 void cRenderTexture::LuaRegister (lua_State *L) { PROFILE
00196 cLuaBind<cRenderTexture>::GetSingletonPtr(new cRenderTexture_L())->LuaRegister(L);
00197 }
00198
00199 };