Beispiel #1
0
bool ResourceFile::write (Array<File>& filesCreated, const int maxFileSize)
{
    const File headerFile (project.getBinaryDataHeaderFile());

    {
        MemoryOutputStream mo;
        if (! (writeHeader (mo) && FileHelpers::overwriteFileWithNewDataIfDifferent (headerFile, mo)))
            return false;

        filesCreated.add (headerFile);
    }

    int i = 0;
    int fileIndex = 0;

    for (;;)
    {
        File cpp (project.getBinaryDataCppFile (fileIndex));

        MemoryOutputStream mo;
        if (! (writeCpp (mo, headerFile, i, maxFileSize) && FileHelpers::overwriteFileWithNewDataIfDifferent (cpp, mo)))
            return false;

        filesCreated.add (cpp);
        ++fileIndex;

        if (i >= files.size())
            break;
    }

    return true;
}
Result ResourceFile::write (Array<File>& filesCreated, const int maxFileSize)
{
    const File headerFile (project.getBinaryDataHeaderFile());

    {
        MemoryOutputStream mo;
        Result r (writeHeader (mo));

        if (r.failed())
            return r;

        if (! FileHelpers::overwriteFileWithNewDataIfDifferent (headerFile, mo))
            return Result::fail ("Can't write to file: " + headerFile.getFullPathName());

        filesCreated.add (headerFile);
    }

    int i = 0;
    int fileIndex = 0;

    for (;;)
    {
        File cpp (project.getBinaryDataCppFile (fileIndex));

        MemoryOutputStream mo;

        Result r (writeCpp (mo, headerFile, i, maxFileSize));

        if (r.failed())
            return r;

        if (! FileHelpers::overwriteFileWithNewDataIfDifferent (cpp, mo))
            return Result::fail ("Can't write to file: " + cpp.getFullPathName());

        filesCreated.add (cpp);
        ++fileIndex;

        if (i >= files.size())
            break;
    }

    return Result::ok();
}
bool ResourceFile::write (const File& cppFile, Array<File>& filesCreated)
{
    const File headerFile (cppFile.withFileExtension (".h"));

    {
        MemoryOutputStream mo;
        if (! (writeHeader (mo) && FileHelpers::overwriteFileWithNewDataIfDifferent (headerFile, mo)))
            return false;

        filesCreated.add (headerFile);
    }

    int i = 0;
    int fileIndex = 0;

    for (;;)
    {
        File cpp (cppFile);

        if (fileIndex > 0)
            cpp = cpp.getSiblingFile (cppFile.getFileNameWithoutExtension() + String (fileIndex + 1))
                     .withFileExtension (cppFile.getFileExtension());

        MemoryOutputStream mo;
        if (! (writeCpp (mo, headerFile, i) && FileHelpers::overwriteFileWithNewDataIfDifferent (cpp, mo)))
            return false;

        filesCreated.add (cpp);
        ++fileIndex;

        if (i >= files.size())
            break;
    }

    return true;
}
void D3D11InterfaceWriter::write(const string &_name, const string &input, const string &outputCpp, const string &outputHeader)
{
    name = _name;
    auto lines = util::getFileLines(input, 3);
    
    string fullDesc;
    for (const string &s : lines)
        fullDesc += s + "\n";

    fullDesc = util::remove(fullDesc, "/* [annotation] */");
    fullDesc = util::remove(fullDesc, "/* [annotation][out] */");
    fullDesc = util::remove(fullDesc, "/* [annotation][in] */");
    fullDesc = util::remove(fullDesc, "/* [annotation][out][in] */");
    fullDesc = util::remove(fullDesc, "/* [in] */");
    fullDesc = util::remove(fullDesc, "__inout_opt");
    fullDesc = util::remove(fullDesc, "_In_opt_");
    fullDesc = util::remove(fullDesc, "__in_opt");
    fullDesc = util::remove(fullDesc, "_Out_opt_");
    fullDesc = util::remove(fullDesc, "_In_");
    fullDesc = util::remove(fullDesc, "_Out_");
    fullDesc = util::remove(fullDesc, "_Out_");
    fullDesc = util::remove(fullDesc, "__in");
    fullDesc = util::remove(fullDesc, "__out");
    fullDesc = util::remove(fullDesc, "_opt");
    
    fullDesc = util::remove(fullDesc, ") = 0;");

    auto functionDescriptions = util::split(fullDesc, "virtual ");

    functions.clear();

    for (const string &funcDesc : functionDescriptions)
    {
        auto funcParts = util::split(wordify(funcDesc), '(');
        auto header = funcParts[0];
        auto params = util::split(funcParts[1], ',');

        D3D11InterfaceFunction func;

        func.returnType = util::split(header, ' ')[0];
        func.name = util::split(header, ' ')[2];

        for (const string &p : params)
        {
            //const D3D11_SHADER_RESOURCE_VIEW_DESC * pDesc
            auto words = util::split(p, ' ');

            FunctionParameter newParam;

            for (int i = 0; i < words.size() - 1; i++)
                newParam.type += words[i] + ' ';
            newParam.name = words.back();

            func.params.push_back(newParam);
        }

        functions.push_back(func);
    }

    writeCpp(outputCpp);
    writeHeader(outputHeader);
}