Ignore:
Timestamp:
08/19/13 07:42:00 (12 years ago)
Author:
epyon
Message:
  • lua - concept change - all functionality in nv::lua except raw
  • lua - all modules made header-independent from raw (except obviously raw)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lua/lua_glm.cc

    r177 r207  
    1313static size_t nlua_swizzel_lookup[256];
    1414
     15using nv::lua::detail::is_vec;
     16using nv::lua::detail::to_vec;
     17using nv::lua::detail::to_pvec;
     18using nv::lua::detail::push_vec;
     19
    1520inline bool nlua_is_swizzel( const unsigned char* str, size_t max )
    1621{
     
    4247        static inline T construct( lua_State* L, int index ) {
    4348                if ( lua_type( L, index ) == LUA_TUSERDATA )
    44                         return nlua_to_vec<T>( L, index );
     49                        return to_vec<T>( L, index );
    4550                else
    4651                        return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ) );
     
    5459                if ( lua_type( L, index ) == LUA_TUSERDATA )
    5560                {
    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 );
    5863                        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 ) );
    6065                }
    6166                else
    6267                {
    6368                        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 ) );
    6570                        else
    6671                                return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ) );
     
    7681                if ( lua_type( L, index ) == LUA_TUSERDATA )
    7782                {
    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 );
    8085                        else
    8186                        {
    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 ) );
    8489                                else
    8590                                {
    8691                                        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 ) );
    8893                                        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 ) );
    9095                                }
    9196                        }
     
    95100                        if ( lua_type( L, index+1 ) == LUA_TUSERDATA )
    96101                        {
    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 ) );
    99104                                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 ) );
    101106                        }
    102107                        else
    103108                        {
    104109                                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 ) );
    106111                                else
    107112                                        return T( lua_tonumber( L, index ), lua_tonumber( L, index + 1 ), lua_tonumber( L, index + 2 ), lua_tonumber( L, index + 3 ) );
     
    114119int nlua_vec_new( lua_State* L )
    115120{
    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 ) );
    117122        return 1;
    118123}
     
    121126int nlua_vec_random( lua_State* L )
    122127{
    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 ) ) );
    124129        return 1;
    125130}
     
    128133int nlua_vec_clone( lua_State* L )
    129134{
    130         nlua_push_vec<T>( L, nlua_to_vec<T>( L, 1 ) );
     135        push_vec<T>( L, to_vec<T>( L, 1 ) );
    131136        return 1;
    132137}
     
    135140int nlua_vec_call( lua_State* L )
    136141{
    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 ) );
    138143        return 1;
    139144}
     
    142147static int nlua_vec_unm( lua_State* L )
    143148{
    144         nlua_push_vec<T>( L, -nlua_to_vec<T>( L, 1 ) );
     149        push_vec<T>( L, -to_vec<T>( L, 1 ) );
    145150        return 1;
    146151}
     
    150155{
    151156        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 ) );
    153158        else
    154159                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 ) );
    158163        return 1;
    159164}
     
    163168{
    164169        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 ) );
    166171        else
    167172                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 ) );
    171176        return 1;
    172177}
     
    176181{
    177182        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 ) );
    179184        else
    180185                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 ) );
    184189        return 1;
    185190}
     
    189194{
    190195        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 ) );
    192197        else
    193198                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 ) );
    197202        return 1;
    198203}
     
    201206int nlua_vec_eq( lua_State* L )
    202207{
    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 ) );
    204209        return 1;
    205210}
     
    208213int nlua_vec_get( lua_State* L )
    209214{
    210         T v = nlua_to_vec<T>( L, 1 );
     215        T v = to_vec<T>( L, 1 );
    211216        for ( size_t i = 0; i < v.length(); ++i )
    212217        {
     
    219224int nlua_vec_index( lua_State* L )
    220225{
    221         T* v = nlua_to_pvec<T>( L, 1 );
     226        T* v = to_pvec<T>( L, 1 );
    222227        size_t len  = 0;
    223228        size_t vlen = v->length();
     
    237242        {
    238243                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;
    242247                default: break;
    243248                }
     
    257262        typedef glm::detail::tvec4<typename T::value_type> vec4;
    258263
    259         T* v = nlua_to_pvec<T>( L, 1 );
     264        T* v = to_pvec<T>( L, 1 );
    260265        size_t len  = 0;
    261266        size_t vlen = v->length();
     
    274279        {
    275280                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;
    279284                default: break;
    280285                }
     
    286291static int nlua_vec_tostring( lua_State* L )
    287292{
    288         T v = nlua_to_vec<T>( L, 1 );
     293        T v = to_vec<T>( L, 1 );
    289294        std::string s = "(";
    290295        for ( size_t i = 0; i < v.length(); ++i )
     
    332337        };
    333338
    334         luaL_newmetatable( L, nlua_metatable_name<T>() );
     339        luaL_newmetatable( L, nv::lua::detail::glm_metatable_name<T>() );
    335340        nlua_register( L, nlua_vec_m, -1 );
    336341        lua_createtable( L, 0, 0 );
     
    345350        lua_setmetatable( L, -2 );
    346351
    347         nlua_push_vec( L, T() );
     352        nv::lua::detail::push_vec( L, T() );
    348353        lua_setfield( L, -2, "ZERO" );
    349         nlua_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() );
    350355        lua_setfield( L, -2, "UNIT" );
    351356        return 1;
    352357}
    353358
    354 void nlua_register_glm( lua_State* L )
     359void nv::lua::register_glm( lua_State* L )
    355360{
    356361        for (size_t i = 0; i < 256; ++i ) nlua_swizzel_lookup[i] = 255;
Note: See TracChangeset for help on using the changeset viewer.