Floating-Point operazioni in Funzioni driver grafici
Se una funzione driver grafica contiene codice che usa l'unità a virgola mobile (FPU), tale codice deve essere preceduto da una chiamata a EngSaveFloatingPointState e seguita da una chiamata a EngRestoreFloatingPointState. Per un elenco di funzioni del driver grafico, vedere Funzioni driver grafici.
Se è disponibile un FPU, verrà usato da qualsiasi codice che assegna un valore a una variabile a virgola mobile o esegue calcoli che coinvolgono numeri a virgola mobile. Ad esempio, ognuna delle righe di codice seguenti usa l'FPU.
double myDouble = 5;
int myInt = 5 * 4.3;
int myInt = 50 * cos(2);
Si supponga di scrivere una funzione DrvAlphaBlend che usa l'FPU. Nell'esempio seguente viene illustrato come salvare e ripristinare lo stato a virgola mobile.
#define DRIVER_TAG // Put your driver tag here, for example 'zyxD'
BOOL DrvAlphaBlend(...)
{
...
ULONG result;
double floatVal;
VOID* pBuf;
ULONG bufSize;
// Determine the size of the required buffer.
bufSize = EngSaveFloatingPointState(NULL, 0);
if(bufSize > 0)
{
// Allocate a zeroed buffer in the nonpaged pool.
pBuf = EngAllocMem(
FL_NONPAGED_MEMORY|FL_ZERO_MEMORY, bufSize, DRIVER_TAG);
if(pBuf != NULL)
{
// The buffer was allocated successfully.
// Save the floating-point state.
result = EngSaveFloatingPointState(pBuf, bufSize);
if(TRUE == result)
{
// The floating-point state was saved successfully.
// Use the FPU.
floatVal = 0.8;
...
EngRestoreFloatingPointState(pBuffer);
}
EngFreeMem(pBuf);
}
}
...
}
GDI salva automaticamente lo stato a virgola mobile per le chiamate alla funzione DrvEscape di un driver quando l'escape è OPENGL_CMD, OPENGL_GETINFO o MCDFUNCS. In questi casi, è possibile usare l'FPU nella funzione DrvEscape senza chiamare EngSaveFloatingPointState e EngRestoreFloatingPointState.
La maggior parte delle funzioni di callback DirectDraw e Direct3D che eseguono operazioni a virgola mobile deve anche salvare e ripristinare lo stato a virgola mobile. Per altre informazioni, vedere Esecuzione di operazioni a virgola mobile in DirectDraw ed esecuzione di operazioni a virgola mobile in Direct3D.
Per informazioni sui servizi a virgola mobile forniti da GDI, vedere GDI Floating-Point Services.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per