mirror of
https://github.com/reactos/wine.git
synced 2024-11-26 13:10:28 +00:00
83 lines
3.0 KiB
C
83 lines
3.0 KiB
C
/*
|
|
* Context and render target management in wined3d
|
|
*
|
|
* Copyright 2007 Stefan Dösinger for CodeWeavers
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include <stdio.h>
|
|
#ifdef HAVE_FLOAT_H
|
|
# include <float.h>
|
|
#endif
|
|
#include "wined3d_private.h"
|
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(d3d);
|
|
|
|
/*****************************************************************************
|
|
* ActivateContext
|
|
*
|
|
* Finds a rendering context and drawable matching the device and render
|
|
* target for the current thread, activates them and puts them into the
|
|
* requested state.
|
|
*
|
|
* Params:
|
|
* This: Device to activate the context for
|
|
* target: Requested render target
|
|
* usage: Prepares the context for blitting, drawing or other actions
|
|
*
|
|
*****************************************************************************/
|
|
void ActivateContext(IWineD3DDeviceImpl *This, IWineD3DSurface *target, ContextUsage usage) {
|
|
DWORD tid = This->createParms.BehaviorFlags & D3DCREATE_MULTITHREADED ? GetCurrentThreadId() : 0;
|
|
int i;
|
|
DWORD dirtyState, idx;
|
|
BYTE shift;
|
|
WineD3DContext *context;
|
|
|
|
TRACE("(%p): Selecting context for render target %p, thread %d\n", This, target, tid);
|
|
/* TODO: Render target selection */
|
|
|
|
/* TODO: Thread selection */
|
|
|
|
/* TODO: Activate the opengl context */
|
|
context = &This->contexts[This->activeContext];
|
|
|
|
switch(usage) {
|
|
case CTXUSAGE_RESOURCELOAD:
|
|
/* This does not require any special states to be set up */
|
|
break;
|
|
|
|
case CTXUSAGE_DRAWPRIM:
|
|
/* This needs all dirty states applied */
|
|
for(i=0; i < context->numDirtyEntries; i++) {
|
|
dirtyState = context->dirtyArray[i];
|
|
idx = dirtyState >> 5;
|
|
shift = dirtyState & 0x1f;
|
|
context->isStateDirty[idx] &= ~(1 << shift);
|
|
StateTable[dirtyState].apply(dirtyState, This->stateBlock, context);
|
|
}
|
|
context->numDirtyEntries = 0; /* This makes the whole list clean */
|
|
break;
|
|
|
|
case CTXUSAGE_BLIT:
|
|
FIXME("Setting up for blitting not supported yet\n");
|
|
break;
|
|
|
|
default:
|
|
FIXME("Unexpected context usage requested\n");
|
|
}
|
|
}
|