Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
If a graphics driver function contains code that uses the floating-point unit (FPU), that code must be preceded by a call to EngSaveFloatingPointState and followed by a call to EngRestoreFloatingPointState. For a list of graphics driver functions, see Graphics Driver Functions.
If an FPU is available, it will be used by any code that assigns a value to a floating-point variable or performs calculations that involve floating-point numbers. For example, each of the following lines of code uses the FPU.
double myDouble = 5;
int myInt = 5 * 4.3;
int myInt = 50 * cos(2);
Suppose you are writing a DrvAlphaBlend function that uses the FPU. The following example demonstrates how you should save and restore the floating-point state.
#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 automatically saves the floating-point state for any calls to a driver's DrvEscape function when the escape is OPENGL_CMD, OPENGL_GETINFO, or MCDFUNCS. In those cases, you can use the FPU in your DrvEscape function without calling EngSaveFloatingPointState and EngRestoreFloatingPointState.
Most DirectDraw and Direct3D callback functions that perform floating-point operations should also save and restore the floating-point state. For more information, see Performing Floating-point Operations in DirectDraw and Performing Floating-point Operations in Direct3D.
For information about floating-point services provided by GDI, see GDI Floating-Point Services.