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()); }