esl primary code



namespace esl {

    
class shader {
    
public:
        
virtual int query() = 0;
        
virtual void deletethis() = 0;
    }
;

    
class surface : public shader {
    
public:
        
virtual int query()
        
{
            
return default_surface_query;
        }

    }
;

    template 
< typename T > class ptr {
    
public:

    }
;

    
void ei_declare_shader( ei_shader_type shader_type, 
                            
const ei_string shader_name,
                             )
    
{
        va_list                        args;
        
int                            para;
        static_parameter_container    spcon;
        dynamic_parameter_container    dpcon;
        parameter_container            
*cpcon = NULL;
        ei_string                    str;
        
float                        fval;

        va_start( args, shader_name );

        
while(1)
        
{
            para 
= va_arg( args, int );

            
if( para == ei_end )
                
break;

            
switch( para )
            
{
            
case ei_static:
                cpcon 
= &spcon; 
                
break;
            
case ei_dynamic:
                cpcon 
= &dpcon;
                
break;
            
case ei_float:
                str 
= va_arg( args, ei_string );
                fval 
= va_arg( args, float );
                cpcon
->add_float( str, fval );
                
break;
            
case ei_int:
                
break;
            
case ei_bool:
                
break;
            
case ei_color:
                
break;
            
case ei_point:
                
break;
            
case ei_vector:
                
break;
            
case ei_normal:
                
break;
            
case ei_matrix:
                
break;
            }

        }


        va_end( args );
    }


    
void ei_shader( const ei_string named_shader,
                    
const ei_string shader_name,
                     )
    
{
        va_list            args;
        ei_string        str;
        
int                type;
        
int                pos;
        ptr
<float>        fval;
        shader_instance    
*inst;

        va_start( args, shader_name );

        
while(1)
        
{
            str 
= va_arg( args, ei_string );

            
if( str == ei_end )
                
break;

            inst
->lookup( str, type, pos );

            
switch( type )
            
{
            
case ei_float:
                fval 
= va_arg( args, ptr<float> );
                inst
->set_float( pos, fval );
                
break;
            
case ei_int:
                
break;
            
case ei_bool:
                
break;
            
case ei_color:
                
break;
            
case ei_point:
                
break;
            
case ei_vector:
                
break;
            
case ei_normal:
                
break;
            
case ei_matrix:
                
break;
            }

        }


        va_end( args );
    }


}
;
原文地址:https://www.cnblogs.com/len3d/p/1046056.html