Eu li muitas perguntas interessantes sobre XNA x OpenTK x SlimDX x OpenGL x DX, e embora seja realmente útil obter outras impressões gerais de centenas de horas usando essas várias APIs / Frameworks, não vi qualquer resposta que defina claramente qual é o escopo de cada um.
Entendeu-se qual é a diferença entre uma API, mecanismo e estrutura, em teoria, mas para alguém que tem experiência limitada com sistemas gráficos, é mais difícil ver o que, do lado prático, se enquadra em cada categoria. (Não é facilitada por toda a sobreposição! Por exemplo, XNA implementando um pipeline de conteúdo como parte integrante)
Tomemos, por exemplo, seleção de rosto - o XNA 'faz' isso em segundo plano, sem que o programador precise pensar sobre isso, mas onde isso acontece? Existe uma função 'cara de abate' no DX que deve ser chamada ou talvez acima no XNA? Ou a GPU ou seu driver faz isso?
Eu li na documentação de um dos projetos gerenciados (irritantemente não me lembro qual) sobre o quão difícil foi implementar código de renderização eficiente e como esse projeto o abstraiu. Isso me deixou um pouco nervoso e me fez pensar no que o XNA está fazendo sob DrawIndexedPrimitives que teria que ser feito manualmente, caso a estrutura fosse deixada para algo mais flexível.
O que o XNA faz em segundo plano, ao renderizar esse cubo, que uma API gerenciada não faria?
fonte
Respostas:
Eu acho que a pergunta seria melhor respondida se você a invertesse. Como exatamente uma placa de vídeo funciona e que chamadas são feitas pelo DirectX ou OpenGL para utilizar esses recursos?
Isso não responderia sua pergunta em si, mas como o DirectX e o OpenGL adicionam muitas classes de nível superior para simplificar as coisas para você, acredito que a diferença é muito vaga com o que o XNA fornece, por exemplo.
Para o básico, você encontrará semelhanças nas chamadas do DirectX / XNA porque, em um determinado nível (inferior), as coisas não podem ser mais abstactas e as chamadas deverão ser feitas por você.
Então, eu diria para criar um mecanismo de renderização simples no OpenGL (eu diria mais acessível para obter um nível mais baixo) e ver aonde isso leva você!
fonte
Uma estrutura, essencialmente, fornece uma API. Geralmente, ele usa ou envolve outras APIs para fazer isso. Os dois termos não são necessariamente distintos, não há diferença clara no escopo e não é realmente importante que você consiga diferenciar - o importante é saber em que nível de abstração qualquer API, biblioteca, estrutura, mecanismo, plataforma ou pacote opera em. Descobrir isso varia infelizmente caso a caso.
fonte
A estrutura começa ... onde a API termina. A API é um conjunto limitado de funções / classes / o que você pode usar, e a estrutura apenas envolve tudo isso.
Se você está perguntando sobre quantas coisas acontecem entre sua chamada para qualquer função da estrutura que você esteja usando para acessar o método de API que está chamando, isso realmente não é responsável no caso geral. Algumas coisas são fáceis, outras são realmente abstratas e podem estar escondendo coisas que seriam úteis para você saber (e é por isso que estou assumindo que você está fazendo essa pergunta).
Para o XNA especificamente, você provavelmente pode ver o código usando uma ferramenta como o ILSpy para abrir as DLLs do XNA e ver o que está acontecendo sob o capô.
fonte