зеркало из https://github.com/mozilla/gecko-dev.git
Bug 614111: Clear and recreate VertexBuffer on device reset. r=jrmuizel a=blocking-beta8
This commit is contained in:
Родитель
be479e9785
Коммит
1c4fe46fe9
|
@ -377,30 +377,10 @@ DeviceManagerD3D9::Init()
|
|||
return false;
|
||||
}
|
||||
|
||||
hr = mDevice->CreateVertexBuffer(sizeof(vertex) * 4,
|
||||
D3DUSAGE_WRITEONLY,
|
||||
0,
|
||||
D3DPOOL_DEFAULT,
|
||||
getter_AddRefs(mVB),
|
||||
NULL);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
if (!CreateVertexBuffer()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vertex *vertices;
|
||||
hr = mVB->Lock(0, 0, (void**)&vertices, 0);
|
||||
if (FAILED(hr)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vertices[0].x = vertices[0].y = 0;
|
||||
vertices[1].x = 1; vertices[1].y = 0;
|
||||
vertices[2].x = 0; vertices[2].y = 1;
|
||||
vertices[3].x = 1; vertices[3].y = 1;
|
||||
|
||||
mVB->Unlock();
|
||||
|
||||
hr = mDevice->SetStreamSource(0, mVB, 0, sizeof(vertex));
|
||||
if (FAILED(hr)) {
|
||||
return false;
|
||||
|
@ -541,6 +521,8 @@ DeviceManagerD3D9::VerifyReadyForRendering()
|
|||
for(unsigned int i = 0; i < mSwapChains.Length(); i++) {
|
||||
mSwapChains[i]->Reset();
|
||||
}
|
||||
|
||||
mVB->Release();
|
||||
|
||||
D3DPRESENT_PARAMETERS pp;
|
||||
memset(&pp, 0, sizeof(D3DPRESENT_PARAMETERS));
|
||||
|
@ -559,7 +541,7 @@ DeviceManagerD3D9::VerifyReadyForRendering()
|
|||
return false;
|
||||
}
|
||||
|
||||
if (FAILED(hr)) {
|
||||
if (FAILED(hr) || !CreateVertexBuffer()) {
|
||||
mDeviceWasRemoved = true;
|
||||
LayerManagerD3D9::OnDeviceManagerDestroy(this);
|
||||
return false;
|
||||
|
@ -629,5 +611,37 @@ DeviceManagerD3D9::VerifyCaps()
|
|||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
DeviceManagerD3D9::CreateVertexBuffer()
|
||||
{
|
||||
HRESULT hr;
|
||||
|
||||
hr = mDevice->CreateVertexBuffer(sizeof(vertex) * 4,
|
||||
D3DUSAGE_WRITEONLY,
|
||||
0,
|
||||
D3DPOOL_DEFAULT,
|
||||
getter_AddRefs(mVB),
|
||||
NULL);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vertex *vertices;
|
||||
hr = mVB->Lock(0, 0, (void**)&vertices, 0);
|
||||
if (FAILED(hr)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
vertices[0].x = vertices[0].y = 0;
|
||||
vertices[1].x = 1; vertices[1].y = 0;
|
||||
vertices[2].x = 0; vertices[2].y = 1;
|
||||
vertices[3].x = 1; vertices[3].y = 1;
|
||||
|
||||
mVB->Unlock();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
} /* namespace layers */
|
||||
} /* namespace mozilla */
|
||||
|
|
|
@ -175,6 +175,12 @@ private:
|
|||
*/
|
||||
bool VerifyReadyForRendering();
|
||||
|
||||
/**
|
||||
* This will fill our vertex buffer with the data of our quad, it may be
|
||||
* called when the vertex buffer is recreated.
|
||||
*/
|
||||
bool CreateVertexBuffer();
|
||||
|
||||
/* Array used to store all swap chains for device resets */
|
||||
nsTArray<SwapChainD3D9*> mSwapChains;
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче