Leer en inglés

Compartir a través de


Ancho frente a Tono (Direct3D 9)

Aunque los términos ancho y tono se suelen usar informalmente, tienen significados muy importantes y distintos. 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 llevar 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 alto y ancho 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. Pitch 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 tono a veces refleja 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 el ancho del mismo búfer frontal, búfer de reserva y de 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 presentación. Si la aplicación funciona en algunos adaptadores de pantalla, pero parece garabateada en otras, puede ser la causa del problema.

Para obtener más información, consulta acceder directamente a la memoria expuesta (Direct3D 9).

de superficies de Direct3D de