É uma péssima idéia, na medida em que não faz sentido. Não há nada para "configurar" que você ainda não tenha feito, exceto uma matriz de projeção orto (que você terá que fazer em qualquer caso).
A portabilidade provavelmente não é um problema, embora deva ser. IHVs parecem ser muito relutantes em perder o suporte para modo imediato para o futuro previsível (parece "bom trabalho" mesmo em perfis de núcleo), portanto, embora modo imediato deveria ter morrido há muito tempo, ele provavelmente vai ficar para sempre. O desempenho é outra história. Deseja realmente que algo que represente 0,1% da complexidade da cena consuma 15 a 20% do tempo da CPU - as chamadas GL são relativamente leves, em comparação com, por exemplo, o DX, mas não são gratuitas - e 15 a 20% tempo de quadro real devido ao bloqueio do pipeline? Você pode pagar isso com seu orçamento de tempo? A maioria dos jogos não pode.
E então, claro, as peculiaridades. Oh, as peculiaridades. A beleza aparente do modo imediato é que é (aparentemente) fácil e direto fazer algo como desenhar dois quadríceps rapidamente. Na realidade, o modo imediato pode ser uma dor na parte traseira, é tão cheio de armadilhas não óbvias.
Por outro lado, é tão fácil (e mais direto, se você me perguntar!) Escrever apenas uma pequena função 5-LOC DrawQuad
que, quando chamada, adiciona coordenadas e índices de vértices a um buffer de memória e incrementa um contador. Com surpresa, você pode desenhar glDrawArrays/Elements
e reutilizar (a cópia da GPU, não apenas a cópia da terra do usuário!) O próximo quadro, como está, desde que nada seja alterado.
O modo imediato deve, de nenhuma outra maneira, alocar um buffer e fazer uma transferência PCIe sempre. Ou, algo equivalente em latência (GPU lendo a memória principal no barramento, qualquer que seja). O motorista não pode saber (ou assumir) que os dados permaneceram exatamente os mesmos do quadro anterior.
A obtenção de dados na GPU é uma operação de alta velocidade, mas também de alta latência . Não é só a transferência de ônibus per se um complicado protocolo, alta latência (várias camadas de protocolo, empacotamento, agradecimentos, etc.), mas também nem todas as GPUs são mesmo capazes de transferir e desenhar ao mesmo tempo, ou se eles podem fazê-lo , eles podem não ser capazes de alternar o tempo todo ou iniciar novas operações livremente enquanto fazem algo diferente. Leia como: Você não deve transferir em vão .