wined3d: Index buffer fixes.
This commit is contained in:
parent
6d66347cf9
commit
efc03f0a34
|
@ -3691,7 +3691,7 @@ IDirect3DDeviceImpl_7_DrawIndexedPrimitiveVB(IDirect3DDevice7 *iface,
|
|||
*/
|
||||
hr = IWineD3DIndexBuffer_Lock(This->indexbuffer,
|
||||
0 /* OffSetToLock */,
|
||||
0 /* SizeToLock - doesn't matter */,
|
||||
IndexCount * sizeof(WORD),
|
||||
(BYTE **) &LockedIndices,
|
||||
0 /* Flags */);
|
||||
assert(IndexCount < 0x100000);
|
||||
|
|
|
@ -804,7 +804,7 @@ IDirect3DImpl_7_CreateDevice(IDirect3D7 *iface,
|
|||
*/
|
||||
hr = IWineD3DDevice_CreateIndexBuffer(This->wineD3DDevice,
|
||||
0x40000, /* Length. Don't know how long it should be */
|
||||
0, /* Usage */
|
||||
WINED3DUSAGE_DYNAMIC, /* Usage */
|
||||
WINED3DFMT_INDEX16, /* Format. D3D7 uses WORDS */
|
||||
WINED3DPOOL_DEFAULT,
|
||||
&object->indexbuffer,
|
||||
|
|
|
@ -4294,7 +4294,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitive(IWineD3DDevice *
|
|||
UINT idxStride = 2;
|
||||
IWineD3DIndexBuffer *pIB;
|
||||
WINED3DINDEXBUFFER_DESC IdxBufDsc;
|
||||
GLint vbo;
|
||||
GLuint vbo;
|
||||
|
||||
pIB = This->stateBlock->pIndexData;
|
||||
This->stateBlock->streamIsUP = FALSE;
|
||||
|
|
|
@ -60,8 +60,11 @@ static ULONG WINAPI IWineD3DIndexBufferImpl_Release(IWineD3DIndexBuffer *iface)
|
|||
if (ref == 0) {
|
||||
if(This->vbo) {
|
||||
ENTER_GL();
|
||||
GL_EXTCALL(glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0));
|
||||
checkGLcall("glBindBufferARB");
|
||||
/* No need to manually unset the buffer. glDeleteBuffers unsets it for the current context,
|
||||
* but not for other contexts. However, because the d3d buffer is destroyed the app has to
|
||||
* unset it before doing the next draw, thus dirtifying the index buffer state and forcing
|
||||
* binding a new buffer
|
||||
*/
|
||||
GL_EXTCALL(glDeleteBuffersARB(1, &This->vbo));
|
||||
checkGLcall("glDeleteBuffersARB");
|
||||
LEAVE_GL();
|
||||
|
@ -159,6 +162,8 @@ static HRESULT WINAPI IWineD3DIndexBufferImpl_Unlock(IWineD3DIndexBuffer *iface)
|
|||
LEAVE_GL();
|
||||
This->dirtystart = 0;
|
||||
This->dirtyend = 0;
|
||||
/* TODO: Move loading into preload when the buffer is used, that avoids dirtifying the state */
|
||||
IWineD3DDeviceImpl_MarkStateDirty(This->resource.wineD3DDevice, STATE_INDEXBUFFER);
|
||||
}
|
||||
return WINED3D_OK;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue