optix::TextureSampler loadTexture( optix::Context context,
								  const std::string& filename,
								  const optix::float3& default_color )
{
	bool IsHDR = false;
	bool HavePPM = false;

	if (filename.size() > 0)
	{
		std::size_t pos_back  = filename.find_last_of("/\\");
		std::size_t pos_point = filename.find(".");
		std::string path      = filename.substr(0, pos_back+1);
		std::string name      = filename.substr(pos_back+1, (filename.size()-pos_back)-(filename.size()-pos_point)-1);
		std::string extension = filename.substr(pos_point+1);

		std::string new_file = path + name + ".ppm";
		std::ifstream exists(new_file);

		if (exists)
		{
			return loadPPMTexture(context, new_file, default_color);
		}

		if (extension.compare("hdr") == 0 || extension.compare("HDR") == 0)
		{
			IsHDR = true;
		}

		if(!IsHDR && extension.compare("ppm") != 0 || extension.compare("PPM") != 0)
		{
			std::string convert = "convert.exe " + filename + " " + new_file;
			system(convert.c_str());
			return loadPPMTexture(context, new_file, default_color);
		}
	}

	if (IsHDR)
	{
		return loadHDRTexture(context, filename, default_color);
	}
	else
	{
		return loadPPMTexture(context, filename, default_color);
	}
}
Example #2
0
SUTILAPI optix::TextureSampler loadTexture( optix::Context context,
                                            const std::string& filename,
                                            const optix::float3& default_color )
{
  bool IsHDR = false;
  size_t len = filename.length();
  if(len >= 3) {
    IsHDR = (filename[len-3] == 'H' || filename[len-3] == 'h') &&
      (filename[len-2] == 'D' || filename[len-2] == 'd') &&
      (filename[len-1] == 'R' || filename[len-1] == 'r');
  }
  if(IsHDR)
    return loadHDRTexture(context, filename, default_color);
  else
    return loadPPMTexture(context, filename, default_color);
}