Share via


Almacenamiento de variables y tipos para sombreadores que se van a compartir

El objeto de vinculación de clases es un espacio de nombres para variables y tipos que pueden compartir varios sombreadores. Cuando se pasa un objeto de vinculación de clases en una llamada para crear un sombreador, el tiempo de ejecución recopila una lista de variables y tipos que pueden implementar cada interfaz en el sombreador y almacena los nombres de esas variables y tipos en el objeto de vinculación de clases.

Por lo tanto, cuando se llama al método ID3D11ClassLinkage::GetClassInstance para generar instancias de clase desde el objeto de vinculación de clases, el tiempo de ejecución puede recuperar la variable o el tipo que corresponde al nombre que se proporciona en cada sombreador (si ese nombre es válido para un sombreador determinado) y que se crea con el objeto de vinculación de clase determinado.

Por ejemplo, supongamos que tiene una clase Light que implementa una interfaz Color y usa esta clase en el sombreador de vértices y el sombreador de píxeles. Cuando se crea un sombreador (por ejemplo, llamando a ID3D11Device::CreatePixelShader), el tiempo de ejecución determina que el tipo de clase Light está disponible en sombreadores de vértices y píxeles y agrega el tipo de clase Light al objeto de vinculación de clases. A continuación, puede crear una instancia de Light en una ubicación que desee, enlazar los recursos para ambos sombreadores y pasar esta instancia en la matriz de instancias de clase al establecer el sombreador en el dispositivo (por ejemplo, llamando a ID3D11DeviceContext::P SSetShader). A continuación, el tiempo de ejecución realiza la secuencia siguiente:

  1. Comprueba que la instancia se creó con el mismo objeto de vinculación de clase.
  2. Comprueba que el tipo de clase Light está disponible en sombreadores de vértices y píxeles.
  3. Selecciona las tablas de funciones correctas, que pueden ser diferentes para los sombreadores de vértices y píxeles.
  4. Envía los desplazamientos que proporciona la instancia.

En última instancia, el objeto de vinculación de clases es un repositorio de nombres de tipo y variables. El número máximo de nombres disponibles para cada elemento (tipo y variable) es de 64 000. Cuanto más largos sean los nombres de tipo y variable, mayor será el requisito de almacenamiento para los metadatos de interfaz que se almacenan por sombreador. Esto se debe a que el tiempo de ejecución debe almacenar una asignación para estos nombres para cada sombreador.

Vinculación dinámica

Vinculación dinámica