bool CheckRender::PGMvsPGM( const char *src_file, const char *ref_file, const float epsilon, const float threshold ) { unsigned char *src_data = NULL, *ref_data = NULL; unsigned long error_count = 0; unsigned int width, height; char *ref_file_path = sdkFindFilePath(ref_file, m_ExecPath); if (ref_file_path == NULL) { printf("CheckRender::PGMvsPGM unable to find <%s> in <%s> Aborting comparison!\n", ref_file, m_ExecPath); printf(">>> Check info.xml and [project//data] folder <%s> <<<\n", ref_file); printf("Aborting comparison!\n"); printf(" FAILED\n"); error_count++; } else { if (src_file == NULL || ref_file_path == NULL) { printf("PGMvsPGM: Aborting comparison\n"); return false; } printf(" src_file <%s>\n", src_file); printf(" ref_file <%s>\n", ref_file_path); if (sdkLoadPPMub(ref_file_path, &ref_data, &width, &height) != true) { printf("PGMvsPGM: unable to load ref image file: %s\n", ref_file_path); return false; } if (sdkLoadPPMub(src_file, &src_data, &width, &height) != true) { printf("PGMvsPGM: unable to load src image file: %s\n", src_file); return false; } printf("PGMvsPGM: comparing images size (%d,%d) epsilon(%2.4f), threshold(%4.2f%%)\n", m_Height, m_Width, epsilon, threshold*100); if (compareDataAsFloatThreshold<unsigned char, float>( ref_data, src_data, m_Height*m_Width, epsilon, threshold ) == false) { error_count = 1; } } if (error_count == 0) { printf(" OK\n"); } else { printf(" FAILURE: %d errors...\n", (unsigned int)error_count); } return (error_count == 0); // returns true if all pixels pass }
inline bool sdkComparePGM(const char *src_file, const char *ref_file, const float epsilon, const float threshold, bool verboseErrors) { unsigned char *src_data = 0, *ref_data = 0; unsigned long error_count = 0; unsigned int ref_width, ref_height; unsigned int src_width, src_height; if (src_file == NULL || ref_file == NULL) { if (verboseErrors) { std::cerr << "PGMvsPGM: src_file or ref_file is NULL. Aborting comparison\n"; } return false; } if (verboseErrors) { std::cerr << "> Compare (a)rendered: <" << src_file << ">\n"; std::cerr << "> (b)reference: <" << ref_file << ">\n"; } if (sdkLoadPPMub(ref_file, &ref_data, &ref_width, &ref_height) != true) { if (verboseErrors) { std::cerr << "PGMvsPGM: unable to load ref image file: "<< ref_file << "\n"; } return false; } if (sdkLoadPPMub(src_file, &src_data, &src_width, &src_height) != true) { std::cerr << "PGMvsPGM: unable to load src image file: " << src_file << "\n"; return false; } if (src_height != ref_height || src_width != ref_width) { if (verboseErrors) std::cerr << "PGMvsPGM: source and ref size mismatch (" << src_width << "," << src_height << ")vs(" << ref_width << "," << ref_height << ")\n"; } if (verboseErrors) std::cerr << "PGMvsPGM: comparing images size (" << src_width << "," << src_height << ") epsilon(" << epsilon << "), threshold(" << threshold*100 << "%)\n"; if (compareData(ref_data, src_data, src_width*src_height, epsilon, threshold) == false) { error_count=1; } if (error_count == 0) { if (verboseErrors) { std::cerr << " OK\n\n"; } } else { if (verboseErrors) { std::cerr << " FAILURE! "<<error_count<<" errors...\n\n"; } } return (error_count == 0)? true : false; // returns true if all pixels pass }