inline int dtypeStrToDType(const std::string& s) { for (hxb_datatype type = HXB_DTYPE_BOOL; type <= HXB_DTYPE_16BYTES; type = hxb_datatype(type + 1)) if (shortDatatypeName(type) == s || datatypeName(type) == s) return type; return -1; }
char *UniformData::UniformString(){ ostringstream os; if (outputString){ free(outputString); } os << name << "(" << program << ", " << location << ") type: " << std::hex << datatype_enum << " : " << datatypeName(datatype); if (isValueSet){ if ((datasize[0] == datasize[1]) && (datasize[0] == 1)){ //Single Value switch(datatype){ case CINT: os << " = " << ((int*) data)[0]; break; case CUINT: os << " = " << ((unsigned int*) data)[0]; break; case CFLOAT: os << " = " << ((float*) data)[0]; break; case CBOOL: os << " = " << ((bool*) data)[0]; break; default: os << " = " << std::hex << ((unsigned int*) data)[0]; break; } } else if (datasize[0] == 1){ //Array os << " = "; printRow(&os, 0); } else if (datasize[0] != 0){ //Matrix os << " = "; int blanklength = os.str().length(); char *blank = (char*) malloc (sizeof(char) * (blanklength + 1)); for (int i = 0; i < blanklength; i++){ blank[i] = ' '; } blank[blanklength] = 0; printRow(&os, 0); for (int i = 1; i < datasize[0]; i++) { os << '\n' << blank; printRow(&os, i); } } else{ os << " = (not implemented yet / unknown)"; } } else{ os << " = (null / not set)"; } outputString = strdup(os.str().c_str()); return outputString; }
char *UniformData::InfoString(){ ostringstream os; if (outputString){ free(outputString); } os << name << "(" << program << ", " << location << ") type: " << std::hex << datatype_enum << " : " << datatypeName(datatype); outputString = strdup(os.str().c_str()); return outputString; }