Это плохая идея, поскольку это бессмысленно. Нет ничего для «настройки», которую вы еще не сделали, за исключением матрицы ортопроекции (что вам придется делать в любом случае).
Переносимость, вероятно, не является проблемой, хотя и должна быть. IHV, похоже, очень неохотно отказываются от поддержки немедленного режима в обозримом будущем (кажется, что он «работает» даже в основных профилях), поэтому, хотя немедленный режим должен был давно исчезнуть, он, вероятно, останется навсегда. Производительность это другая история. Вы действительно хотите, чтобы что-то, что составляет 0,1% сложности сцены, занимало 15-20% процессорного времени - вызовы GL относительно легки по сравнению, например, с DX, но они не бесплатны - и 15-20% реальное время кадра из-за остановки трубопровода? Вы можете даже позволить себе это с вашим временным бюджетом? Большинство игр не могут.
И, конечно, причуды. О, причуды. Очевидная красота немедленного режима заключается в том, что (на первый взгляд) легко и просто сделать что-то вроде быстрого рисования пары четырехугольников. В действительности немедленный режим может быть такой болью в тылу, он полон неочевидных ловушек.
С другой стороны, так же просто (и более просто, если вы спросите меня!) Просто написать небольшую функцию 5-LOC, DrawQuad
которая при вызове добавляет координаты вершины и индексы в буфер памяти и увеличивает счетчик. Который, к удивлению, вы можете затем нарисовать, glDrawArrays/Elements
и который вы можете использовать повторно (копию GPU, а не только копию пользовательской области!) В следующем кадре, пока ничего не изменилось.
Непосредственный режим должен, иначе нет, выделить буфер и каждый раз выполнять передачу PCIe. Или что-то эквивалентное по задержке (GPU читает основную память по шине, что угодно). Драйвер не может знать (или предполагать), что данные остались в точности такими же, как в предыдущем кадре.
Передача данных в графический процессор - это высокоскоростная, но также высокопроизводительная операция. Перенос по шине сам по себе является сложным протоколом с высокой задержкой (несколько уровней протоколов, пакетирование, подтверждения и т. Д.), Но также не все графические процессоры способны даже передавать и рисовать одновременно или если они могут это делать они могут быть не в состоянии все время переключаться или инициировать новые операции свободно, делая что-то другое. Читайте как: Ты не будешь переносить напрасно .