Понадобилось мне сделать проект, еще не знаю какой , но общие соображения делаю уже сейчас, ясно, что буду юзать д3д. На этапе планирования возник вопрос по поводу растеризации, у меня в проге будут разные объекты, которые должны рендериться с разными настройками, одни с освещением, другие с прозрачностью, третьи с отключенным з-буфером. Просвятите меня плз по поводу ресурсоемкости таких операций, в частности, установка буфера вершин для последующей отрисовки. В пред. проге я делал просто: у каждого объекта свой буфер, своя процедура рисования, которая включает/выключает все что надо, а по выходу делает все назад, но еще на стадии программирования интерфейса у меня пошли тормоза, тогда я создал класс TriangleList, создав всего 1 буфер для меню, я хранил в нем (объекте класса) односвязный список с инфой как и что рисовать, а сам отображаемый объект знал только указатель на свой TriangleList и номер элемента, который содержит инфу о вершинах в буфере. Также я после добавления/удаления объектов вызывал функцию, котрая оптимизировала последовательность узлов в списке для минимизации кол-ва изменений различных настроек. Тормоза после этого исчезли, но система у меня получилась довольно громоздкая, хотя работала без глюков. Далее знакомясь с DirectX, у меня еще несколько раз случались ситуации, когда ормозило, но работало, как правило, причиной этого являлся какой-нибудь пустой буфер,неправильно инициализированый или используемый не так. Вопрос - это я в первый раз просто лишнего кода наворотил, вместо того, чтобы проверить все еще раз, или в DX в самом деле настройки так тормозны.
Вставлю свои пять копеек. Чем меньше используется переключений буферов и чем больше при этом размеры самих буферов (до определенного объема конечно), тем лучше. Также дела обстоят и с различными установками текстур и прочее и прочее. Оптимально считается что одинаковые вещи нужно группировать, а не использовать принцип при котором каждый объект хранит в себе все настройки и перед отрисовкой их устанавливает. Правильный шаг. Если есть сомнения относительно того или иного применяемого алгоритма в своей программе, то можно использовать профайлеры для сбора статистики с последующей оптимизацией по ней. Взять к примеру PIX или NVPerf.
возможно ты упустил из простых правил: 1 нельзя использовать вывод текста типа DrawTex (40% жрет сразу) 2 GetTransform и GetBackBuffer тормозят 3 текстуры должны быть размером 128х128 256х256 1024х1024 и т.д. 4 буфер один в него загружается текущая сцена 5 не использовать рисование всей сцены а записывать в буфер тока видимую часть 6 И НЕ В КОЕМ СЛУЧАЕ НЕ ВЫЗЫВАТЬ ФУНКЦИИ ТИПА BEGIN и END много раз за кадр они сразу убью всю мощь видухи настройки растеризатора можна впихнуть в особый StateRender блок потом просто указать что хочеш использовать его простым вызовом