inline void generateFilteredData(std::vector<GLfloat>& scalardata, const std::tr1::shared_ptr<Attribute>& ptr, size_t mode) { //Update the data according to what was selected scalardata.resize(ptr->num_elements()); const size_t components = ptr->components(); const std::vector<GLfloat>& attrdata = *ptr; if (mode == 1) //Magnitude calculation { for (size_t i(0); i < scalardata.size(); ++i) { scalardata[i] = 0; for (size_t j(0); j < components; ++j) { GLfloat val = attrdata[i * components + j]; scalardata[i] += val * val; } scalardata[i] = std::sqrt(scalardata[i]); } } else { //Component wise selection size_t component = mode - 2; #ifdef COIL_DEBUG if (component >= components) M_throw() << "Trying to filter an invalid component"; #endif for (size_t i(0); i < scalardata.size(); ++i) scalardata[i] = attrdata[i * components + component]; } }