ubiquitous_ptr<ShaderTechnique> technique = null;
ShaderTechnique* mytech = null;
for ( ulword t = 0; t < description.Count(); ++t ) {
technique = new ShaderTechnique( *device, description[ t ], options );
if ( technique != null && technique->PassCount() > 0 ) {
techniqueindices.Add( technique->Name(), techniques.size() );
// Release it when `techniques` holder will become owner
mytech = technique.release();
techniques.push_back( mytech );
for ( ulword i = 0; i < mytech->PassCount(); ++i ) {
Parameters.Add( mytech->PassAt( i )->Parameters );
}
}
}
dWJpcXVpdG91c19wdHI8U2hhZGVyVGVjaG5pcXVlPiB0ZWNobmlxdWUgPSBudWxsOwpTaGFkZXJUZWNobmlxdWUqIG15dGVjaCA9IG51bGw7CmZvciAoIHVsd29yZCB0ID0gMDsgdCA8IGRlc2NyaXB0aW9uLkNvdW50KCk7ICsrdCApIHsKCXRlY2huaXF1ZSA9IG5ldyBTaGFkZXJUZWNobmlxdWUoICpkZXZpY2UsIGRlc2NyaXB0aW9uWyB0IF0sIG9wdGlvbnMgKTsKCWlmICggdGVjaG5pcXVlICE9IG51bGwgJiYgdGVjaG5pcXVlLT5QYXNzQ291bnQoKSA+IDAgKSB7CgkJdGVjaG5pcXVlaW5kaWNlcy5BZGQoIHRlY2huaXF1ZS0+TmFtZSgpLCB0ZWNobmlxdWVzLnNpemUoKSApOwoJCS8vIFJlbGVhc2UgaXQgd2hlbiBgdGVjaG5pcXVlc2AgaG9sZGVyIHdpbGwgYmVjb21lIG93bmVyCgkJbXl0ZWNoID0gdGVjaG5pcXVlLnJlbGVhc2UoKTsKCQl0ZWNobmlxdWVzLnB1c2hfYmFjayggbXl0ZWNoICk7CgkJZm9yICggdWx3b3JkIGkgPSAwOyBpIDwgbXl0ZWNoLT5QYXNzQ291bnQoKTsgKytpICkgewoJCQlQYXJhbWV0ZXJzLkFkZCggbXl0ZWNoLT5QYXNzQXQoIGkgKS0+UGFyYW1ldGVycyApOwoJCX0KCX0KfQ==