Como se cubre en la documentación, los ventiladores triangulares no son compatibles con Direct3D 10 o posterior .
¿Por qué? ¿Existen inconvenientes inherentes a trabajar con ventiladores triangulares?
Como se cubre en la documentación, los ventiladores triangulares no son compatibles con Direct3D 10 o posterior .
¿Por qué? ¿Existen inconvenientes inherentes a trabajar con ventiladores triangulares?
Respuestas:
Durante más de una década, los proveedores de hardware han estado promocionando las tiras triangulares, las listas de triángulos indexados y las tiras triangulares indexadas como los tipos primitivos más rápidos de usar. ¿Por qué? Las tiras tienen una mejor ubicación de caché (reutilizando los últimos 2 verts enviados en lugar de tener que saltar continuamente al primero) y la indexación permite que los cachés de vértices de hardware realmente funcionen, además de ser más efectivos para eliminar los verts duplicados.
Si todos los proveedores de hardware dicen "hágalo de esta manera y va a ser más rápido", entonces hay una buena posibilidad de que si lo hace de esta manera, será más rápido.
Entonces D3D10 + simplemente formaliza esto; si esa es la ruta rápida, entonces esa es la ruta que usará y no existirán otras rutas. Esto está de acuerdo con una de las filosofías de diseño de D3D10 +, que es ponerlo en el camino rápido y mantenerlo allí.
No sé cuánto afecta esto realmente al desarrollo, pero como con cualquier cambio de este tipo, se ha dicho que permitirán que los desarrolladores de controladores escriban mejores controladores. La complejidad de los controladores de GPU es sorprendente, pero no estoy seguro de si este cambio exacto ayudará mucho.
En cualquier caso, es posible reemplazar los ventiladores triangulares para la mayoría de sus necesidades (como la representación de polígonos convexos) con tiras, a menudo con mejores resultados.
// A simplified API interface is presented for the purposes of having readable pseudocode
// Push( pos ) - pushes position data to make a new vertex
// TRIANGLE FANS:
for( i = 0; i < vertices.count; ++i )
Push( vertices[ i ] );
// TRIANGLE STRIPS:
for( i = 0; i < vertices.count; ++i )
{
if( i % 2 == 0 )
vertex = i / 2;
else
vertex = vertices.count - 1 - i / 2;
Push( vertices[ vertex ] );
}
EDITAR: olvidó mencionar, si necesita cambiar el orden de bobinado, simplemente invierta la prueba en ese "si" (== a! =).
(Esta pregunta en particular garantiza una respuesta de opinión :)
Subjetivamente, diría que su arquitectura es el astronautismo. OpenGLES también arrojó un montón de cosas para hacerlo "menos complejo", mientras que en realidad solo empujó la complejidad a todos y cada uno de los desarrolladores con código heredado.
Por supuesto, incluso cuando el hardware no lo admite de forma nativa, habría sido trivial proporcionar compatibilidad con las personas que secuencian los ventiladores de triángulos al convertirlos en tiras o triángulos.
Los tiempos de ejecución de WebGL y demás tienen que hacer un seguimiento de los buffers validados y todo el tiempo, y los conductores pueden manejar fácilmente a las personas que les envían fanáticos a pesar de que no lo admiten.
Así que la eliminación total de FFP y tal es solo una gran molestia de la OMI.