Pasar de DirectX 10 a DirectX 11

10

He realizado una cantidad razonable de pequeños proyectos de pasatiempo con DirectX 9, pero ahora es el momento de pasar a DirectX 11.

Tengo Frank Luna'un libro sobre programación 3D usando DirectX 10 pero nada en DirectX 11. Creo que son bastante similares, pero me preguntaba si alguien podría enumerar las principales diferencias a nivel de código que tendré que tener en cuenta ( o apunte a una fuente existente).

JohnB
fuente
Escuché que DX10 era realmente diferente y no era compatible con DX9, mientras que DX11 era compatible con DX9.
jokoon
DX10 es bastante diferente de DX9 pero DX11 es bastante similar a DX10, solo quería saber cuáles eran las diferencias. Aunque parezca extraño, DX11 funcionará con hardware DX9 pero DX10 no;)
JohnB

Respuestas:

15

La documentación del SDK tiene una sección sobre la migración a 11 que cubre tanto de 9 como de 10. También está la página de características de D3D11 .

Uno de los cambios más importantes en términos de forma de API entre 10 y 11 es que 11 mueve un montón de métodos desde el propio dispositivo a una nueva interfaz llamada contexto del dispositivo ( ID3D11DeviceContextespecíficamente), para admitir las nuevas características de subprocesamiento múltiple.

Sin embargo, una vez que esté al tanto del cambio, es bastante fácil adaptarse a: donde lo habría hecho en 10 llamado " someDevice->Draw()" en su lugar obtendrá el contexto inmediato para el dispositivo y llamará " immediateContext->Draw().

El otro gran cambio es que la API de efectos se extrae del núcleo y se hace una distribución fuente independiente que debe compilar y vincular. También puede observar algunas interfaces y funciones de D3DX que se han desaprobado o eliminado.

Más allá de eso, hay un puñado de nuevos parámetros para algunas funciones y un puñado de campos adicionales en estructuras, etc. Por ejemplo, el objeto de descripción del búfer en 11 tiene un StructureByteStridecampo adicional que no está en 10 , y la creación del dispositivo implica pasar información de nivel de característica . Además, existen los cambios obvios y mencionados en los nombres de las interfaces (10 reemplazados por 11).


fuente
Gracias, justo lo que necesitaba. Busqué alguna guía oficial de lo que había cambiado, pero de alguna manera no pude encontrarla. Gracias por esta respuesta y las otras personas que se tomaron el tiempo para ayudar con buenas respuestas también :)
JohnB
Es curioso cómo uno olvida esas cosas rápidamente. Especialmente odiaba la compilación de efectos y me llevó unos días hacer que funcionara. Pero no lo
incluí
Iba a publicar esto como una pregunta, pero me di cuenta de que su respuesta ya cubre la mayoría de mis preocupaciones, aunque quisiera alguna confirmación. Para alguien que solo trabajó con DX9 pero está buscando mejorar sus conocimientos, recoger un libro de DX11 no solo me enseñará sobre DX11 (obviamente) sino que también me dará suficiente conocimiento para trabajar con DX10 si es necesario.
David Gouveia
Si, mas o menos.
1

Creo que la principal diferencia es que, en DX11, el DXFont se ha ido, aparte de eso, es más o menos como dijo notabene. Deberías estar bien con ese libro DX10. Lo usé cuando me mudé a DX11 y no tuve problemas. Sin embargo, tendrá que ir a ver el msdn de vez en cuando, hay algunas diferencias menores en la API en algunos lugares del IIRC.

dotminic
fuente
1

No habrá necesidad de cambiar. Directx11 solo agrega nuevas funciones. Simplemente cambiará los números de ID3D10 a ID3D11, etc.


DirectX11 agrega (si no se habla de teselación HW publicitada) Computación directa: API para GPGPU, con una excelente conexión a la línea de tubería de gráficos (no puedo decir esto sobre CUDA o openCL). Y la posibilidad de múltiples texturas RW y buffers en un sombreador de píxeles, lo que abre muchas nuevas posibilidades.

Notabene
fuente