static bool compile_buffer (const std::string &sourcecode, const std::string &shadername, std::string &errormessage) { // std::cout << "source was\n---\n" << sourcecode << "---\n\n"; errormessage.clear (); std::string osobuffer; OSLCompiler compiler (&errhandler); std::vector<std::string> options; if (! compiler.compile_buffer (sourcecode, osobuffer, options)) { if (errhandler.haserror()) errormessage = errhandler.geterror(); else errormessage = Strutil::format ("OSL: Could not compile \"%s\"", shadername); return false; } // std::cout << "Compiled to oso:\n---\n" << osobuffer << "---\n\n"; if (! shadingsys->LoadMemoryCompiledShader (shadername, osobuffer)) { if (errhandler.haserror()) errormessage = errhandler.geterror(); else errormessage = Strutil::format ("OSL: Could not load compiled buffer from \"%s\"", shadername); return false; } return true; }
static void shader_from_buffers (std::string shadername) { std::string oslfilename = shadername; if (! OIIO::Strutil::ends_with (oslfilename, ".osl")) oslfilename += ".osl"; std::string sourcecode; if (! read_text_file (oslfilename, sourcecode)) { std::cerr << "Could not open \"" << oslfilename << "\"\n"; exit (EXIT_FAILURE); } // std::cout << "source was\n---\n" << sourcecode << "---\n\n"; std::string osobuffer; OSLCompiler compiler; std::vector<std::string> options; if (! compiler.compile_buffer (sourcecode, osobuffer, options)) { std::cerr << "Could not compile \"" << oslfilename << "\"\n"; exit (EXIT_FAILURE); } // std::cout << "Compiled to oso:\n---\n" << osobuffer << "---\n\n"; if (! shadingsys->LoadMemoryCompiledShader (shadername, osobuffer)) { std::cerr << "Could not load compiled buffer from \"" << shadername << "\"\n"; exit (EXIT_FAILURE); } // std::cout << "Read and compiled " << shadername << "\n"; }
int main (int argc, const char *argv[]) { // Globally force classic "C" locale, and turn off all formatting // internationalization, for the entire oslc application. std::locale::global (std::locale::classic()); OIIO::Filesystem::convert_native_arguments (argc, (const char **)argv); std::vector<std::string> args; bool quiet = false; if (argc <= 1) { usage (); return EXIT_SUCCESS; } for (int a = 1; a < argc; ++a) { if (! strcmp (argv[a], "--help") | ! strcmp (argv[a], "-h")) { usage (); return EXIT_SUCCESS; } else if (! strcmp (argv[a], "-v") || ! strcmp (argv[a], "-q") || ! strcmp (argv[a], "-d") || ! strcmp (argv[a], "-E") || ! strcmp (argv[a], "-O") || ! strcmp (argv[a], "-O0") || ! strcmp (argv[a], "-O1") || ! strcmp (argv[a], "-O2")) { // Valid command-line argument args.emplace_back(argv[a]); quiet |= (strcmp (argv[a], "-q") == 0); } else if (! strcmp (argv[a], "-o") && a < argc-1) { args.emplace_back(argv[a]); ++a; args.emplace_back(argv[a]); } else if (argv[a][0] == '-' && (argv[a][1] == 'D' || argv[a][1] == 'U' || argv[a][1] == 'I')) { args.emplace_back(argv[a]); } else { OSLCompiler compiler (&default_oslc_error_handler); bool ok = compiler.compile (argv[a], args); if (ok) { if (!quiet) std::cout << "Compiled " << argv[a] << " -> " << compiler.output_filename() << "\n"; } else { std::cout << "FAILED " << argv[a] << "\n"; return EXIT_FAILURE; } } } return EXIT_SUCCESS; }
static void compile_buffer (const std::string &sourcecode, const std::string &shadername) { // std::cout << "source was\n---\n" << sourcecode << "---\n\n"; std::string osobuffer; OSLCompiler compiler; std::vector<std::string> options; if (! compiler.compile_buffer (sourcecode, osobuffer, options)) { std::cerr << "Could not compile \"" << shadername << "\"\n"; exit (EXIT_FAILURE); } // std::cout << "Compiled to oso:\n---\n" << osobuffer << "---\n\n"; if (! shadingsys->LoadMemoryCompiledShader (shadername, osobuffer)) { std::cerr << "Could not load compiled buffer from \"" << shadername << "\"\n"; exit (EXIT_FAILURE); } }