Changeset 207 for trunk/src/lua/lua_glm.cc
- Timestamp:
- 08/19/13 07:42:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lua/lua_glm.cc
r177 r207 13 13 static size_t nlua_swizzel_lookup[256]; 14 14 15 using nv::lua::detail::is_vec; 16 using nv::lua::detail::to_vec; 17 using nv::lua::detail::to_pvec; 18 using nv::lua::detail::push_vec; 19 15 20 inline bool nlua_is_swizzel( const unsigned char* str, size_t max ) 16 21 { … … 42 47 static inline T construct( lua_State* L, int index ) { 43 48 if ( lua_type( L, index ) == LUA_TUSERDATA ) 44 return nlua_to_vec<T>( L, index );49 return to_vec<T>( L, index ); 45 50 else 46 51 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ) ); … … 54 59 if ( lua_type( L, index ) == LUA_TUSERDATA ) 55 60 { 56 if ( nlua_is_vec<T>( L, index ) )57 return nlua_to_vec<T>( L, index );61 if ( is_vec<T>( L, index ) ) 62 return to_vec<T>( L, index ); 58 63 else 59 return T( nlua_to_vec<vec2>( L, index ), lua_tonumber( L, index + 1 ) );64 return T( to_vec<vec2>( L, index ), lua_tonumber( L, index + 1 ) ); 60 65 } 61 66 else 62 67 { 63 68 if ( lua_type( L, index+1 ) == LUA_TUSERDATA ) 64 return T( lua_tonumber( L, index ), nlua_to_vec<vec2>( L, index+1 ) );69 return T( lua_tonumber( L, index ), to_vec<vec2>( L, index+1 ) ); 65 70 else 66 71 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ) ); … … 76 81 if ( lua_type( L, index ) == LUA_TUSERDATA ) 77 82 { 78 if ( nlua_is_vec<T>( L, index ) )79 return nlua_to_vec<T>( L, index );83 if ( is_vec<T>( L, index ) ) 84 return to_vec<T>( L, index ); 80 85 else 81 86 { 82 if ( nlua_is_vec<vec3>( L, index ) )83 return T( nlua_to_vec<vec3>( L, index ), lua_tonumber( L, index + 1 ) );87 if ( is_vec<vec3>( L, index ) ) 88 return T( to_vec<vec3>( L, index ), lua_tonumber( L, index + 1 ) ); 84 89 else 85 90 { 86 91 if ( lua_type( L, index+1 ) == LUA_TUSERDATA ) 87 return T( nlua_to_vec<vec2>( L, index ), nlua_to_vec<vec2>( L, index + 1 ) );92 return T( to_vec<vec2>( L, index ), to_vec<vec2>( L, index + 1 ) ); 88 93 else 89 return T( nlua_to_vec<vec2>( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ) );94 return T( to_vec<vec2>( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ) ); 90 95 } 91 96 } … … 95 100 if ( lua_type( L, index+1 ) == LUA_TUSERDATA ) 96 101 { 97 if ( nlua_is_vec<vec3>( L, index+1 ) )98 return T( lua_tonumber( L, index ), nlua_to_vec<vec3>( L, index+1 ) );102 if ( is_vec<vec3>( L, index+1 ) ) 103 return T( lua_tonumber( L, index ), to_vec<vec3>( L, index+1 ) ); 99 104 else 100 return T( lua_tonumber( L, index ), nlua_to_vec<vec2>( L, index+1 ), lua_tonumber( L, index + 2 ) );105 return T( lua_tonumber( L, index ), to_vec<vec2>( L, index+1 ), lua_tonumber( L, index + 2 ) ); 101 106 } 102 107 else 103 108 { 104 109 if ( lua_type( L, index+2 ) == LUA_TUSERDATA ) 105 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), nlua_to_vec<vec2>( L, index+2 ) );110 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), to_vec<vec2>( L, index+2 ) ); 106 111 else 107 112 return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ), lua_tonumber( L, index + 3 ) ); … … 114 119 int nlua_vec_new( lua_State* L ) 115 120 { 116 nlua_push_vec<T>( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::construct( L, 1 ) );121 push_vec<T>( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::construct( L, 1 ) ); 117 122 return 1; 118 123 } … … 121 126 int nlua_vec_random( lua_State* L ) 122 127 { 123 nlua_push_vec<T>( L, nv::random::get().range( nlua_to_vec<T>( L, 1 ), nlua_to_vec<T>( L, 2 ) ) );128 push_vec<T>( L, nv::random::get().range( to_vec<T>( L, 1 ), to_vec<T>( L, 2 ) ) ); 124 129 return 1; 125 130 } … … 128 133 int nlua_vec_clone( lua_State* L ) 129 134 { 130 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) );135 push_vec<T>( L, to_vec<T>( L, 1 ) ); 131 136 return 1; 132 137 } … … 135 140 int nlua_vec_call( lua_State* L ) 136 141 { 137 nlua_push_vec<T>( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::construct( L, 2 ) );142 push_vec<T>( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::construct( L, 2 ) ); 138 143 return 1; 139 144 } … … 142 147 static int nlua_vec_unm( lua_State* L ) 143 148 { 144 nlua_push_vec<T>( L, -nlua_to_vec<T>( L, 1 ) );149 push_vec<T>( L, -to_vec<T>( L, 1 ) ); 145 150 return 1; 146 151 } … … 150 155 { 151 156 if ( lua_type( L, 1 ) == LUA_TNUMBER ) 152 nlua_push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) + nlua_to_vec<T>( L, 2 ) );157 push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) + to_vec<T>( L, 2 ) ); 153 158 else 154 159 if ( lua_type( L, 2 ) == LUA_TNUMBER ) 155 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) + (typename T::value_type)(lua_tonumber( L, 2 )) );156 else 157 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) + nlua_to_vec<T>( L, 2 ) );160 push_vec<T>( L, to_vec<T>( L, 1 ) + (typename T::value_type)(lua_tonumber( L, 2 )) ); 161 else 162 push_vec<T>( L, to_vec<T>( L, 1 ) + to_vec<T>( L, 2 ) ); 158 163 return 1; 159 164 } … … 163 168 { 164 169 if ( lua_type( L, 1 ) == LUA_TNUMBER ) 165 nlua_push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) - nlua_to_vec<T>( L, 2 ) );170 push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) - to_vec<T>( L, 2 ) ); 166 171 else 167 172 if ( lua_type( L, 2 ) == LUA_TNUMBER ) 168 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) - (typename T::value_type)(lua_tonumber( L, 2 )) );169 else 170 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) - nlua_to_vec<T>( L, 2 ) );173 push_vec<T>( L, to_vec<T>( L, 1 ) - (typename T::value_type)(lua_tonumber( L, 2 )) ); 174 else 175 push_vec<T>( L, to_vec<T>( L, 1 ) - to_vec<T>( L, 2 ) ); 171 176 return 1; 172 177 } … … 176 181 { 177 182 if ( lua_type( L, 1 ) == LUA_TNUMBER ) 178 nlua_push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) * nlua_to_vec<T>( L, 2 ) );183 push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) * to_vec<T>( L, 2 ) ); 179 184 else 180 185 if ( lua_type( L, 2 ) == LUA_TNUMBER ) 181 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) * (typename T::value_type)(lua_tonumber( L, 2 )) );182 else 183 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) * nlua_to_vec<T>( L, 2 ) );186 push_vec<T>( L, to_vec<T>( L, 1 ) * (typename T::value_type)(lua_tonumber( L, 2 )) ); 187 else 188 push_vec<T>( L, to_vec<T>( L, 1 ) * to_vec<T>( L, 2 ) ); 184 189 return 1; 185 190 } … … 189 194 { 190 195 if ( lua_type( L, 1 ) == LUA_TNUMBER ) 191 nlua_push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) / nlua_to_vec<T>( L, 2 ) );196 push_vec<T>( L, (typename T::value_type)(lua_tonumber( L, 1 )) / to_vec<T>( L, 2 ) ); 192 197 else 193 198 if ( lua_type( L, 2 ) == LUA_TNUMBER ) 194 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) / (typename T::value_type)(lua_tonumber( L, 2 )) );195 else 196 nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) / nlua_to_vec<T>( L, 2 ) );199 push_vec<T>( L, to_vec<T>( L, 1 ) / (typename T::value_type)(lua_tonumber( L, 2 )) ); 200 else 201 push_vec<T>( L, to_vec<T>( L, 1 ) / to_vec<T>( L, 2 ) ); 197 202 return 1; 198 203 } … … 201 206 int nlua_vec_eq( lua_State* L ) 202 207 { 203 lua_pushboolean( L, nlua_to_vec<T>( L, 1 ) == nlua_to_vec<T>( L, 2 ) );208 lua_pushboolean( L, to_vec<T>( L, 1 ) == to_vec<T>( L, 2 ) ); 204 209 return 1; 205 210 } … … 208 213 int nlua_vec_get( lua_State* L ) 209 214 { 210 T v = nlua_to_vec<T>( L, 1 );215 T v = to_vec<T>( L, 1 ); 211 216 for ( size_t i = 0; i < v.length(); ++i ) 212 217 { … … 219 224 int nlua_vec_index( lua_State* L ) 220 225 { 221 T* v = nlua_to_pvec<T>( L, 1 );226 T* v = to_pvec<T>( L, 1 ); 222 227 size_t len = 0; 223 228 size_t vlen = v->length(); … … 237 242 { 238 243 switch (len) { 239 case 2 : nlua_push_vec( L, glm::detail::tvec2<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]] ) ); return 1;240 case 3 : nlua_push_vec( L, glm::detail::tvec3<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]], (*v)[nlua_swizzel_lookup[key[2]]] ) ); return 1;241 case 4 : nlua_push_vec( L, glm::detail::tvec4<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]], (*v)[nlua_swizzel_lookup[key[2]]], (*v)[nlua_swizzel_lookup[key[3]]] ) ); return 1;244 case 2 : push_vec( L, glm::detail::tvec2<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]] ) ); return 1; 245 case 3 : push_vec( L, glm::detail::tvec3<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]], (*v)[nlua_swizzel_lookup[key[2]]] ) ); return 1; 246 case 4 : push_vec( L, glm::detail::tvec4<typename T::value_type>( (*v)[nlua_swizzel_lookup[key[0]]], (*v)[nlua_swizzel_lookup[key[1]]], (*v)[nlua_swizzel_lookup[key[2]]], (*v)[nlua_swizzel_lookup[key[3]]] ) ); return 1; 242 247 default: break; 243 248 } … … 257 262 typedef glm::detail::tvec4<typename T::value_type> vec4; 258 263 259 T* v = nlua_to_pvec<T>( L, 1 );264 T* v = to_pvec<T>( L, 1 ); 260 265 size_t len = 0; 261 266 size_t vlen = v->length(); … … 274 279 { 275 280 switch (len) { 276 case 2 : { vec2 v2 = nlua_to_vec<vec2>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v2[i]; } return 0;277 case 3 : { vec3 v3 = nlua_to_vec<vec3>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v3[i]; } return 0;278 case 4 : { vec4 v4 = nlua_to_vec<vec4>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v4[i]; } return 0;281 case 2 : { vec2 v2 = to_vec<vec2>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v2[i]; } return 0; 282 case 3 : { vec3 v3 = to_vec<vec3>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v3[i]; } return 0; 283 case 4 : { vec4 v4 = to_vec<vec4>(L,3); for (size_t i = 0; i<len; ++i) (*v)[nlua_swizzel_lookup[key[i]]] = v4[i]; } return 0; 279 284 default: break; 280 285 } … … 286 291 static int nlua_vec_tostring( lua_State* L ) 287 292 { 288 T v = nlua_to_vec<T>( L, 1 );293 T v = to_vec<T>( L, 1 ); 289 294 std::string s = "("; 290 295 for ( size_t i = 0; i < v.length(); ++i ) … … 332 337 }; 333 338 334 luaL_newmetatable( L, n lua_metatable_name<T>() );339 luaL_newmetatable( L, nv::lua::detail::glm_metatable_name<T>() ); 335 340 nlua_register( L, nlua_vec_m, -1 ); 336 341 lua_createtable( L, 0, 0 ); … … 345 350 lua_setmetatable( L, -2 ); 346 351 347 n lua_push_vec( L, T() );352 nv::lua::detail::push_vec( L, T() ); 348 353 lua_setfield( L, -2, "ZERO" ); 349 n lua_push_vec( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::unit() );354 nv::lua::detail::push_vec( L, nlua_vec_constructor<T,sizeof( T ) / sizeof( typename T::value_type )>::unit() ); 350 355 lua_setfield( L, -2, "UNIT" ); 351 356 return 1; 352 357 } 353 358 354 void n lua_register_glm( lua_State* L )359 void nv::lua::register_glm( lua_State* L ) 355 360 { 356 361 for (size_t i = 0; i < 256; ++i ) nlua_swizzel_lookup[i] = 255;
Note: See TracChangeset
for help on using the changeset viewer.