2010-02-28 10 views
18

He estado jugando con Direct3D 11 un poco últimamente y me he sentido frustrado por la falta de documentación sobre los conceptos básicos de la API (como la representación de geometría simple). Uno de los puntos de confusión provocados por la escasa documentación es el (aparente) alejamiento del uso de efectos para sombreadores.¿Los archivos de efectos Direct3D 11 están en desuso?

En D3D11, todo el soporte de efectos (.fx) ha sido eliminado de las librerías D3DX y escondido en una biblioteca de fuentes compartida difícil de encontrar (escasamente documentada, por supuesto). Ninguno de los ejemplos incluidos lo usa, prefiriendo en su lugar compilar archivos HLSL directamente. Todo esto me dice que Microsoft está tratando de hacer que la gente deje de usar el formato de archivo de efectos. ¿Es eso cierto? ¿Hay algún tipo de documentación que indique eso? Estoy bien hacerlo de cualquier manera, pero durante años han estado promocionando el formato .fx, así que parece extraño que de repente decidan dejarlo.

+0

No podría estar más de acuerdo. [ID3DX11Effect] (http://msdn.microsoft.com/en-us/library/ff476652 (VS.85) .aspx) no se hace referencia en absoluto en los ejemplos (excepto el ejemplo que proporciona ID3DX11Effect), e incluso eso solo construye un archivo .lib Debido a que es tan difícil de alcanzar, parece desalentar a las personas a usarlo. – bobobobo

Respuesta

4

Estoy en la misma posición, y después de googlear como loco incluso para la muestra más simple que utiliza D3DX11CreateEffectFromMemory, también he llegado a la conclusión de que el soporte de archivos .fx no es su mayor prioridad. Aunque es extraño que hayan agregado el concepto EffectGroup, que es nuevo en 11, si no quieren que lo usemos.

He jugado un poco con la nueva API de reflexión, por lo que parece que será bastante fácil hackear juntas sus propias funciones para establecer variables, etc., en esencia, crear su propia clase de efecto, y el siguiente paso es va a ver qué soporte tienen para crear bloques de estado de renderización a través de la API. Ser capaz de editarlos directamente en el archivo .fx fue muy agradable, así que espero que algo así todavía exista (o, en el peor de los casos, puedo extraer esa parte del código de Effect11).

+0

Lo que establecí al final fue una clase auxiliar que utilizaba la API de reflexión para analizar los parámetros vs/ps, y tenía métodos como set_variable (name, value) para establecer los valores (en realidad mapeaban el cbuffer si era necesario y actualizaban la memoria directamente). También implementé un sistema donde obtendría una devolución de llamada si el archivo en el disco cambiaba, por lo que podía volver a cargar dinámicamente los sombreadores. Para los estados de plantilla de profundidad, etc., terminé usando estas funciones de ayuda: http://legalizeadulthood.wordpress.com/2009/07/12/description-helpers-for-direct3d-10-10-1-and- 11/ –

0

http://msdn.microsoft.com/en-us/library/ff476261(v=VS.85).aspx

Esto sugiere que puede tener un sombreado o un efecto.

http://msdn.microsoft.com/en-us/library/ff476190(v=VS.85).aspx

Además, ¿cuál es la diferencia entre un shader y un efecto?

+0

Nah, CompileFromFile solo funciona con sombreadores, ya que requiere un nombre de función pasado como el parámetro pFunctionName, y los efectos no tienen funciones de la misma manera. La diferencia entre un sombreado y un efecto es que un efecto puede verse como un contenedor, que mantiene la configuración del estado de renderizado (y otros metadatos) junto con varios sombreadores, mientras que un sombreador es solo un vértice o sombreador de píxeles. –

3

Muchos desarrolladores profesionales de juegos y gráficos no usan las interfaces de efectos en Direct3D, y muchos de los principales motores de juegos tampoco los utilizan. En cambio, los subsistemas de material/efectos personalizados se crean sobre la parte superior del sombreador de nivel inferior y las instalaciones de administración del estado de los gráficos. Esto permite a los desarrolladores hacer cosas como dirigirse tanto a Direct3D como a OpenGL a través de una canalización de administración de activos común.

+0

IMO esto no tiene nada que ver con el tema aquí – thewhiteambit

1

Hay un tiempo de ejecución de efectos proporcionado como muestra en el SDK de DirectX que debería poder ayudarle a usar archivos .fx. Salida el directorio:% DXSDK_DIR% \ Samples \ C++ \ efectos11

+1

La última versión de Effects 11 está alojada en [CodePlex] (http://go.microsoft.com/fwlink/?linkid=271568&clcid=0xC0A). –

3

El principal problema es que el perfil fx_5_0 que se necesita para compilar Efectos 11 shaders con los metadatos necesarios está en desuso por el equipo HLSL compilador. El tiempo de ejecución es shared-source, pero el compilador no. En el último D3DCompiler (# 47), emite una advertencia al respecto. fx_5_0 nunca fue informado de algunos aspectos del lenguaje más nuevas en DirectX 11.1 y 11.2, pero funciona "tal cual" para Direct3D 11.

El segundo problema es que se necesita API D3DCompile en tiempo de ejecución para hacer uso de Efectos 11. Desde D3DCompile era 'solo desarrollo' para las aplicaciones de Windows Store para Windows 8.0 y Windows phone 8.0, no era una opción allí. Es técnicamente posible utilizar Effects 11 hoy con Windows Store aplicaciones para Windows 8.1 y Windows phone 8.1 ya que D3DCompile # 47 es parte del sistema operativo e incluye el soporte del compilador 'obsoleto/tal cual' para fx_5_0, pero este uso es no animado

La mayor parte de los ejemplos de DirectX SDK y todos los ejemplos de Windows Store evitan el uso de Effects 11. Publiqué algunos ejemplos de escritorio de Win32 que lo usan en GitHub.

Así que, en resumen, sí, no le animamos a usarlo, pero de todos modos puede hacerlo en este momento si puede vivir con los descargos de responsabilidad.

+0

Entonces, ¿qué usas en lugar de 'fx_5_0'? – MoonKnight

+0

No usas efectos en absoluto. Construyes todas las permutaciones y las etapas de sombreado directamente como '' vs_5_0'', '' ps_5_0'', etc. –

Cuestiones relacionadas