Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O tempo de execução do Direct3D 10 é construído com camadas, começando com a funcionalidade básica no núcleo e criando funcionalidade opcional e de assistência ao desenvolvedor em camadas externas.
Camada central
A camada central existe por padrão; fornecendo um mapeamento muito fino entre a API e o driver de dispositivo, minimizando a sobrecarga para chamadas de alta frequência. Como a camada central é essencial para o desempenho, ela só executa a validação crítica.
As camadas restantes são opcionais. Como regra geral, as camadas adicionam funcionalidade, mas não modificam o comportamento existente. Por exemplo, as funções principais terão os mesmos valores de retorno independentemente da camada de depuração que está sendo instanciada, embora uma saída de depuração adicional possa ser fornecida se a camada de depuração for instanciada.
Crie camadas quando um dispositivo é criado chamando D3D10CreateDevice e fornecendo um ou mais valores D3D10_CREATE_DEVICE_FLAG.
Camada de depuração
A camada de depuração fornece ampla validação adicional de parâmetros e consistência (como validação de vinculação de sombreador e vinculação de recursos, validação de consistência de parâmetros e relatórios de descrições de erros). A saída gerada pela camada de depuração consiste em uma fila de cadeias de caracteres que são acessíveis usando o ID3D10InfoQueue Interface (consulte Personalizar saída de depuração com ID3D10InfoQueue (Direct3D 10)). Os erros gerados pela camada principal são realçados com avisos pela camada de depuração.
Para criar um dispositivo que suporte a camada de depuração, você deve instalar o SDK do DirectX (para obter D3D10SDKLayers.DLL) e, em seguida, especifique o sinalizador D3D10_CREATE_DEVICE_DEBUG ao chamar D3D10CreateDevice. É claro que a execução de um aplicativo com a camada de depuração será substancialmente mais lenta. Para ativar/desativar mensagens de depuração para APIs D3DX10, chame D3DX10DebugMute.
Quando a camada de depuração lista vazamentos de memória, ela gera uma lista de ponteiros de interface de objeto junto com seus nomes amigáveis. O nome amigável padrão é "<sem nome>". Você pode definir o nome amigável usando o métodoID3D10DeviceChild::SetPrivateDatae o GUID WKPDID_D3DDebugObjectName que está em D3Dcommon.h. Por exemplo, para nomear pTexture com um nome SDKLayer de mytexture.jpg, use o seguinte código:
const char c_szName[] = "mytexture.jpg";
pTexture->SetPrivateData( WKPDID_D3DDebugObjectName, sizeof( c_szName ) - 1, c_szName );
Normalmente, você deve compilar essas chamadas fora da sua versão de produção.
Alternar para camada de referência
Essa camada permite que um aplicativo faça a transição entre um dispositivo de hardware (HAL) e um dispositivo de referência ou software (REF). Para alternar um dispositivo, você deve primeiro criar um dispositivo que suporte a camada de comutador para referência (consulte D3D10CreateDevice) e, em seguida, chame ID3D10SwitchToRef::SetUseRef.
Todos os estados, recursos e objetos do dispositivo são mantidos através desta transição de dispositivo. No entanto, às vezes não é possível corresponder exatamente os dados do recurso. Isso se deve ao fato de que algumas informações estão disponíveis para um dispositivo de hardware que não está disponível para um dispositivo de referência.
Praticamente todos os aplicativos em tempo real usam a implementação HAL do pipeline. Quando o pipeline é alternado de um dispositivo de hardware para um dispositivo de referência, as operações de renderização são feitas simultaneamente em hardware e software. À medida que o dispositivo de software é renderizado, ele exigirá que os recursos sejam baixados para a memória do sistema. Isso pode exigir que outros recursos armazenados em cache na memória do sistema sejam removidos para abrir espaço.
Observação
Este recurso de alternar para camada de referência é suportado apenas no Direct3D 10 e Direct3D 10.1 e não é mais suportado no Direct3D 11 e versões posteriores.
Thread-Safe Camada
Essa camada foi projetada para permitir que aplicativos multi-threaded acessem o dispositivo a partir de vários threads.
Um aplicativo Direct3D 10 pode controlar uma sincronização de dispositivo usando funções de dispositivo. Isso permite que um aplicativo habilite/desabilite seções críticas (habilitando/desabilitando temporariamente a proteção multithreading) e leve/libere um bloqueio de seção crítica em vários pontos de entrada da API do Direct3D 10. A camada thread-safe está habilitada por padrão. Para aplicativos single-threaded, a camada thread-safe não tem impacto no desempenho.
Diferenças entre o Direct3D 9 e o Direct3D 10:
- Ao contrário do Direct3D 9, o padrão da API do Direct3D 10 é totalmente thread-safe.
Tópicos relacionados