Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Производительность операций обработки вершин, включая преобразование и освещение, сильно зависит от того, где буфер вершин существует в памяти и какой тип устройства отрисовки используется. Приложения управляют выделением памяти для буферов вершин при их создании. При установке флага памяти D3DPOOL_SYSTEMMEM буфер вершин создается в системной памяти. Если используется флаг памяти D3DPOOL_DEFAULT, драйвер устройства определяет, где память для буфера вершин лучше всего выделена, часто называемая оптимальной памятью драйвера. Оптимальная память драйвера может быть локальной памятью видео, нелокальной памятью видео или системной памятью.
Задание константы D3DUSAGE_SOFTWAREPROCESSING с помощью IDirect3DDevice9::CreateVertexBuffer включает программную обработку вершин в данных буфера вершин. Этот флаг необходим для обработки вершин программного обеспечения в смешанном режиме. Флаг не может использоваться для аппаратного режима обработки вершин. Буферы вершин, используемые с обработкой вершин программного обеспечения, включают следующее:
- Все входные потоки для IDirect3DDevice9::ProcessVertices.
- Все входные потоки для IDirect3DDevice9::DrawPrimitive и IDirect3DDevice9::DrawIndexedPrimitive.
Логика, которую вы используете для определения расположения памяти — системной или оптимальной для драйвера — для буферов вершин совпадает с логикой, используемой для текстур. Обработка вершин, включая преобразование и освещение, на оборудовании работает наилучшим образом, когда буферы вершин выделены в памяти, оптимальной для драйвера, тогда как программная обработка вершин достигает наилучших результатов с буферами, выделенными в системной памяти. Для текстур аппаратное растрирование лучше всего работает при выделении текстур в оптимальной памяти драйвера, а программное растрирование лучше всего работает с текстурами системной памяти.
Microsoft Direct3D 9 поддерживает автономную обработку вершин без отрисовки каких-либо примитивов с помощью метода IDirect3Device9::P rocessVertices. Эта автономная обработка вершин всегда выполняется в программном обеспечении на процессоре узла. Из-за этого буферы вершин, используемые в качестве источников с IDirect3DDevice9::SetStreamSource, должны быть созданы с флагом D3DUSAGE_SOFTWAREPROCESSING. Функциональность, предоставляемая IDirect3DDevice9::ProcessVertices, идентична функциональности методов IDirect3DDevice9::DrawPrimitive и IDirect3DDevice9::DrawIndexedPrimitive при использовании программной обработки вершин.
Если приложение выполняет собственную обработку вершин и передает преобразованные, освещенные и обрезанные вершины методам отрисовки, приложение может напрямую записывать вершины в буфер вершин, выделенный в оптимальной памяти драйвера. Этот метод предотвращает операцию избыточного копирования позже. Обратите внимание, что этот метод не работает, если приложение считывает данные обратно из буфера вершин, так как операции чтения, выполняемые узлом из оптимальной памяти драйвера, могут быть очень медленными. Таким образом, если вашему приложению необходимо считывать данные во время обработки или записывать их в буфер беспорядочно, буфер вершин системной памяти является более подходящим выбором.
При использовании функций обработки вершин Direct3D (передавая нетрансформированные вершины в методы отрисовки буфера вершин), обработка может выполняться в аппаратном или программном обеспечении в зависимости от типа устройства и флагов создания устройства. Рекомендуется выделить буферы вершин в пуле D3DPOOL_DEFAULT для оптимальной производительности практически во всех случаях. При использовании аппаратной обработки вершин устройства существует ряд дополнительных оптимизаций, которые могут быть выполнены на основе флагов D3DUSAGE_DYNAMIC и D3DUSAGE_WRITEONLY. Дополнительные сведения об использовании этих флагов см. в разделе IDirect3Device9::CreateVertexBuffer.
Связанные разделы