Exemple #1
0
ID3DBlob* D3D11Context::compileShaderFromBinaryData (const char* id, const char* entry, const char* target)
{
    String fileId = String (id).replaceCharacter ('.', '_');
    int dataSize;
    const char* data = BinaryData::getNamedResource (fileId.toRawUTF8(), dataSize);

    if (nullptr == data)
        return nullptr;

    ShaderCompileDesc desc;
    desc.name = id;
    desc.entry = entry;
    desc.target = target;
    desc.source = data;
    desc.sourceSize = (size_t)dataSize;

    ShaderCompileResult ret = compileShader (desc);

    if (ret.errorMessage)
    {
        const char* str = (const char*)ret.errorMessage->GetBufferPointer();
        errLog (str);
        ret.errorMessage->Release();
    }

    return ret.byteCode;
}
void enum_dd_devices(d3d_context* d3d)
{
    HRESULT hr;
    char targetDev[128];

    ddList.erase(ddList.begin(), ddList.end());

    hr = DirectDrawEnumerate(enum_dd_devices_cb, NULL);
    if (FAILED(hr))
    {
        errLog("enum_dd_devices(DirectDrawCreate)", hr);
    }

    devList.erase(devList.begin(), devList.end());

    for (listdd::iterator i = ddList.begin(); i != ddList.end(); ++i)
    {
        d3d->ddraw1 = (*i).ddraw;

        hr = d3d->ddraw1->QueryInterface(IID_IDirectDraw4, (void**)&d3d->ddraw4);
        if (FAILED(hr))
        {
            errLog("enum_dd_devices(QueryInterface[ddraw4])", hr);
            d3d->ddraw1->Release();
            d3d->ddraw1 = NULL;
            continue;
        }

        hr = d3d->ddraw4->QueryInterface(IID_IDirect3D3, (void**)&d3d->d3dObject);
        if (FAILED(hr))
        {
            errLog("enum_dd_devices(QueryInterface[d3d3])", hr);
            d3d->ddraw4->Release();
            d3d->ddraw4 = NULL;
            continue;
        }

        enum_display_modes(d3d, (*i).nameStr);

        enum_d3d_devices(d3d, (*i).nameStr);

        d3d->d3dObject->Release();
        d3d->d3dObject = NULL;

        d3d->ddraw4->Release();
        d3d->ddraw4 = NULL;

        strncpy(targetDev, rglD3DGetDevice(), 127);
        if (strlen(targetDev) > 0)
        {
            if (strcmp((*i).nameStr, targetDev) == 0)
            {
                lpDirectDraw = d3d->ddraw1;
                d3d->ddraw1 = NULL;
//                rglD3DSetDevice(NULL);
                goto FINISH_NOW;
            }
            else
            {
                d3d->ddraw1->Release();
                d3d->ddraw1 = NULL;
            }
        }
        else
        {
            d3d->ddraw1->Release();
            d3d->ddraw1 = NULL;
        }
    }

  FINISH_NOW:
    devList.erase(devList.begin(), devList.end());
}