wined3d: Make the context array dynamic.
This commit is contained in:
parent
e534340450
commit
7253fae31f
@ -207,7 +207,7 @@ void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextU
|
|||||||
/* TODO: Thread selection */
|
/* TODO: Thread selection */
|
||||||
|
|
||||||
/* TODO: Activate the opengl context */
|
/* TODO: Activate the opengl context */
|
||||||
context = &This->contexts[This->activeContext];
|
context = This->contexts[This->activeContext];
|
||||||
|
|
||||||
switch(usage) {
|
switch(usage) {
|
||||||
case CTXUSAGE_RESOURCELOAD:
|
case CTXUSAGE_RESOURCELOAD:
|
||||||
|
@ -350,10 +350,16 @@ static ULONG WINAPI IWineD3DDeviceImpl_Release(IWineD3DDevice *iface) {
|
|||||||
TRACE("(%p) : Releasing from %d\n", This, refCount + 1);
|
TRACE("(%p) : Releasing from %d\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!refCount) {
|
if (!refCount) {
|
||||||
|
UINT i;
|
||||||
if (This->fbo) {
|
if (This->fbo) {
|
||||||
GL_EXTCALL(glDeleteFramebuffersEXT(1, &This->fbo));
|
GL_EXTCALL(glDeleteFramebuffersEXT(1, &This->fbo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for(i = 0; i < This->numContexts; i++) {
|
||||||
|
HeapFree(GetProcessHeap(), 0, This->contexts[i]);
|
||||||
|
}
|
||||||
|
HeapFree(GetProcessHeap(), 0, This->contexts);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, This->render_targets);
|
HeapFree(GetProcessHeap(), 0, This->render_targets);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, This->draw_buffers);
|
HeapFree(GetProcessHeap(), 0, This->draw_buffers);
|
||||||
@ -2007,8 +2013,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_Init3D(IWineD3DDevice *iface, WINED3DPR
|
|||||||
|
|
||||||
/* Initialize the current view state */
|
/* Initialize the current view state */
|
||||||
This->view_ident = 1;
|
This->view_ident = 1;
|
||||||
This->numContexts = 1;
|
This->contexts[0]->last_was_rhw = 0;
|
||||||
This->contexts[0].last_was_rhw = 0;
|
|
||||||
glGetIntegerv(GL_MAX_LIGHTS, &This->maxConcurrentLights);
|
glGetIntegerv(GL_MAX_LIGHTS, &This->maxConcurrentLights);
|
||||||
TRACE("(%p) All defaults now set up, leaving Init3D with %p\n", This, This);
|
TRACE("(%p) All defaults now set up, leaving Init3D with %p\n", This, This);
|
||||||
|
|
||||||
@ -5948,7 +5953,7 @@ static void device_render_to_texture(IWineD3DDeviceImpl* This, BOOL isTexture) {
|
|||||||
if (This->depth_copy_state != WINED3D_DCS_NO_COPY) {
|
if (This->depth_copy_state != WINED3D_DCS_NO_COPY) {
|
||||||
This->depth_copy_state = WINED3D_DCS_COPY;
|
This->depth_copy_state = WINED3D_DCS_COPY;
|
||||||
}
|
}
|
||||||
This->contexts[0].last_was_rhw = FALSE;
|
This->contexts[0]->last_was_rhw = FALSE;
|
||||||
/* Viewport state will reapply the projection matrix for now */
|
/* Viewport state will reapply the projection matrix for now */
|
||||||
IWineD3DDeviceImpl_MarkStateDirty(This, WINED3DRS_CULLMODE);
|
IWineD3DDeviceImpl_MarkStateDirty(This, WINED3DRS_CULLMODE);
|
||||||
|
|
||||||
@ -6985,7 +6990,7 @@ void IWineD3DDeviceImpl_MarkStateDirty(IWineD3DDeviceImpl *This, DWORD state) {
|
|||||||
if(!rep) return;
|
if(!rep) return;
|
||||||
|
|
||||||
for(i = 0; i < This->numContexts; i++) {
|
for(i = 0; i < This->numContexts; i++) {
|
||||||
context = &This->contexts[i];
|
context = This->contexts[i];
|
||||||
if(isStateDirty(context, rep)) continue;
|
if(isStateDirty(context, rep)) continue;
|
||||||
|
|
||||||
context->dirtyArray[context->numDirtyEntries++] = rep;
|
context->dirtyArray[context->numDirtyEntries++] = rep;
|
||||||
|
@ -2444,6 +2444,12 @@ static HRESULT WINAPI IWineD3DImpl_CreateDevice(IWineD3D *iface, UINT Adapter,
|
|||||||
object->ddraw_format = pixelformat_for_depth(GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES));
|
object->ddraw_format = pixelformat_for_depth(GetDeviceCaps(hDC, BITSPIXEL) * GetDeviceCaps(hDC, PLANES));
|
||||||
ReleaseDC(0, hDC);
|
ReleaseDC(0, hDC);
|
||||||
|
|
||||||
|
/* Allocate one context for now */
|
||||||
|
object->contexts = HeapAlloc(GetProcessHeap(), 0, sizeof(WineD3DContext *));
|
||||||
|
object->contexts[0] = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WineD3DContext));
|
||||||
|
object->numContexts = 1;
|
||||||
|
object->activeContext = 0;
|
||||||
|
|
||||||
return WINED3D_OK;
|
return WINED3D_OK;
|
||||||
create_device_error:
|
create_device_error:
|
||||||
|
|
||||||
|
@ -695,7 +695,7 @@ struct IWineD3DDeviceImpl
|
|||||||
BOOL useDrawStridedSlow;
|
BOOL useDrawStridedSlow;
|
||||||
|
|
||||||
/* Context management */
|
/* Context management */
|
||||||
WineD3DContext contexts[1]; /* Dynamic array later */
|
WineD3DContext **contexts; /* Dynamic array containing pointers to context structures */
|
||||||
UINT activeContext; /* Only 0 for now */
|
UINT activeContext; /* Only 0 for now */
|
||||||
UINT numContexts; /* Always 1 for now */
|
UINT numContexts; /* Always 1 for now */
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user