Compartir a través de


Ancho frente a Inclinación (Direct3D 9)

Aunque los términos ancho y tono se usan a menudo informalmente, tienen muy importantes y distintos significados. Como resultado, debe comprender los significados de cada uno y cómo interpretar los valores que Usa Direct3D para describirlos.

Direct3D usa la estructura D3DSURFACE_DESC para transportar información que describe una superficie. Entre otras cosas, esta estructura se define para contener información sobre las dimensiones de una superficie, así como cómo esas dimensiones se representan en la memoria. La estructura usa los miembros Height y Width para describir las dimensiones lógicas de la superficie. Ambos miembros se miden en píxeles. Por lo tanto, los valores Height y Width de una superficie de 640 x 480 son los mismos si es una superficie de 8 bits o una superficie RGB de 24 bits.

Cuando se bloquea una superficie mediante el método IDirect3DSurface9::LockRect , el método rellena una estructura de D3DLOCKED_RECT que contiene el tono de la superficie y un puntero a los bits bloqueados. El valor del miembro Pitch describe el tono de memoria de la superficie, también denominado paso. El tono es la distancia, en bytes, entre dos direcciones de memoria que representan el principio de una línea de mapa de bits y el principio de la siguiente línea de mapa de bits. Dado que el tono se mide en bytes en lugar de píxeles, una superficie de 640x480x8 tiene un valor de tono muy diferente que una superficie con las mismas dimensiones, pero un formato de píxel diferente. Además, el valor de inclinación a veces refleja los bytes que Direct3D ha reservado como caché, por lo que no es seguro suponer que el tono es solo el ancho multiplicado por el número de bytes por píxel. En su lugar, visualice la diferencia entre ancho y tono, como se muestra en el diagrama siguiente.

diagrama del tono y ancho para el mismo búfer frontal, búfer de reserva y caché

En este diagrama, el búfer frontal y el búfer de reserva son 640x480x8 y la memoria caché es 384x480x8.

Al acceder directamente a las superficies, tenga cuidado de permanecer dentro de la memoria asignada para las dimensiones de la superficie y mantenerse fuera de cualquier memoria reservada para la memoria caché. Además, al bloquear solo una parte de una superficie, debe permanecer dentro del rectángulo que especifique al bloquear la superficie. Si no se siguen estas directrices, se producirán resultados imprevisibles. Al representar directamente en memoria expuesta, use siempre el tono devuelto por el método IDirect3DSurface9::LockRect . No asuma un tono basado únicamente en el modo de visualización. Si la aplicación funciona en algunos adaptadores de pantalla, pero parece en otros, esto puede ser la causa del problema.

Para obtener más información, consulte Acceso directo a la memoria de superficie (Direct3D 9).

Superficies de Direct3D