estructura D3DHAL_DP2TEXBLT (d3dhal.h)
La estructura D3DHAL_DP2TEXBLT se usa para los blts de textura cuando D3dDrawPrimitives2 responde al token de comando de D3DDP2OP_TEXBLT.
Sintaxis
typedef struct _D3DHAL_DP2TEXBLT {
DWORD dwDDDestSurface;
DWORD dwDDSrcSurface;
POINT pDest;
RECTL rSrc;
DWORD dwFlags;
} D3DHAL_DP2TEXBLT;
Miembros
dwDDDestSurface
Especifica el identificador de la textura de destino.
dwDDSrcSurface
Especifica el identificador de la textura de origen.
pDest
Especifica el punto de destino donde se debe realizar la blt, es decir, el punto de la superficie de destino (dwDDDestSurface) para comenzar la blt. Estos miembros x e y de la estructura POINT se especifican en coordenadas de pantalla.
rSrc
Especifica el rectángulo del que se va a dividir en la textura de origen, es decir, el rectángulo de origen de la superficie de origen (dwDDSrcSurface) desde el que se va a blt.
dwFlags
Reservado para uso del sistema.
Comentarios
La devolución de llamada D3dCreateSurfaceEx crea los pequeños identificadores enteros para las texturas que se pueden usar como texturas de origen y destino para los blts de textura.
La estructura D3DHAL_DP2TEXBLT se usa con un token de secuencia de comandos D3DDP2OP_TEXBLT para informar a los controladores de que realicen una operación blt desde una textura de origen a una textura de destino. Una textura también puede ser un mapa de entorno cúbico. El controlador debe copiar un rectángulo especificado por rSrc en la textura de origen en la ubicación especificada por pDest en la textura de destino. Las texturas de origen y de destino se identifican mediante identificadores con los que se notificó al controlador durante el tiempo de creación de texturas. Si el controlador es capaz de administrar texturas, es posible que el identificador de destino sea 0. Esto indica al controlador que debe cargar previamente la textura en la memoria de vídeo (o dondequiera que el hardware tenga una textura eficaz). En este caso, el controlador puede omitir rSrc y pDest.
Tenga en cuenta que para las texturas asignadas de MIP, solo se inserta una D3DDP2OP_TEXBLT instrucción en la secuencia de comandos D3dDrawPrimitives2 . En este caso, se espera que el controlador blt todos los niveles de mapa miP presentes en la textura. Las regiones que se van a copiar en subveles del mapa MIP se pueden obtener dividiendo rSrc ypDest por 2 en cada nivel.
Es posible que las texturas de origen y destino contengan diferentes números de niveles de mapa de MIP. En este caso, se espera que el controlador blt los niveles comunes. Por ejemplo, si una textura de origen de 256x256 tiene 8 niveles de mapa MIP y si el destino es una textura de 64 x 64 con 6 niveles, el controlador debe blt los 6 niveles correspondientes del origen. El controlador puede esperar que las dimensiones del nivel de MIP superior de la textura de destino siempre sean menores o iguales que las dimensiones del nivel de MIP superior de la textura de origen.
Tenga en cuenta que los identificadores de origen y destino siempre hacen referencia a las superficies de nivel superior y nunca a ningún subvel del mapa MIP. Debido a un error en la aplicación, es posible que la textura de destino contenga niveles de mapa MIP adicionales. Por ejemplo, una textura de origen 256x256 puede contener cinco niveles, pero la textura de destino 256x256 puede contener ocho. Se espera que el controlador controle este caso de forma segura, pero no se espera que genere resultados correctos. Debido a problemas de compatibilidad de aplicaciones heredadas, Direct3D no impide que dichos pares de texturas de origen o destino se pasen al controlador.
El controlador puede esperar que los formatos de píxeles de las texturas de origen y destino sean idénticos y, en general, la blt especificada es segura para realizar. Aparte del caso único mencionado anteriormente, el controlador no debe esperar presentarse con ninguna situación que haga imposible realizar una lt.
Si el controlador quiere realizar blts asincrónicos desde la memoria del sistema a la memoria de vídeo, debe implementar la llamada a DirectDraw HAL getSysmemBltStatus; de lo contrario, pueden surgir incoherencias.
Con TexBlt no es necesario que el controlador realice ninguna sincronización porque TexBlts siempre se emite en el orden adecuado junto con los comandos de representación. Antes de esto, era necesario que el controlador controle correctamente el caso cuando un directDraw blt modificó cualquier textura a la que se hace referencia mediante la representación de comandos en cualquier contexto de Direct3D. Cuando hay varios contextos, Direct3D no emite TexBlts. Esto significa que el escritor de controladores puede omitir el código de sincronización en la ruta de acceso del código TexBlt (pero sigue necesitando sincronización para blts).
Ejemplo
El pseudocódigo siguiente muestra cómo se debe calcular un subrectangle para niveles MIP consecutivos, para ir al nivel de MIP i + 1 desde el nivel de MIP i:
rect.left >>= 1;
rect.top >>= 1;
DWORD right = (rect.right + 1) >> 1;
DWORD bottom = (rect.bottom + 1) >> 1;
rect.right = ((right - rect.left) < 1) ?
(rect.left + 1) : (right);
rect.bottom = ((bottom - rect.top ) < 1) ?
(rect.top + 1) : (bottom);
Requisitos
Requisito | Valor |
---|---|
Header | d3dhal.h (incluya D3dhal.h) |
Consulte también
D3DDP2OP_TEXBLT