Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Объекты буфера вершин позволяют приложениям напрямую обращаться к памяти, выделенной для данных вершин. Вы можете получить указатель на память буфера вершин, вызвав метод IDirect3DVertexBuffer9::Lock, а затем доступ к памяти при необходимости для заполнения буфера новыми данными вершин или для чтения данных, которые он уже содержит. Метод IDirect3DVertexBuffer9::Lock принимает четыре параметра. Первым является смещение OffsetToLockв данных вершин. Второй параметр — это размер, измеряемый в байтах данных вершин. Третий параметр, принятый, — это адрес указателя, который указывает на данные вершин, если вызов выполнен успешно.
Последний параметр, Флаги, указывает системе, как следует заблокировать память. Укажите константы для параметра Флаги в соответствии с способом доступа к данным вершин. Убедитесь, что значение, выбранное для D3DUSAGE, соответствует значению, выбранному для D3DLOCK. Например, если вы создаете буфер вершин только с доступом на запись, то не имеет смысла считывать данные, указывая D3DLOCK_READONLY. При использовании этих флагов драйвер может заблокировать память и обеспечить лучшую производительность, учитывая запрошенный тип доступа.
Завершив заполнение или чтение данных вершин, вызовите метод IDirect3DVertexBuffer9::Unlock, как показано в следующем примере кода.
// This code example assumes the g_pVB is a variable of type
// LPDIRECT3DVERTEXBUFFER9 and that g_Vertices has been
// properly initialized with vertices
// Lock the buffer to gain access to the vertices
VOID* pVertices;
if(FAILED(g_pVB->Lock(0, sizeof(g_Vertices),
(BYTE**)&pVertices, 0 ) ) )
return E_FAIL;
memcpy(pVertices, g_Vertices, sizeof(g_Vertices));
g_pVB->Unlock();
Если вы создаете буфер вершин с флагом D3DUSAGE_WRITEONLY, не используйте флаг блокировки D3DLOCK_READONLY. Используйте флаг D3DLOCK_READONLY, если ваше приложение будет читать только из вершинного буфера памяти. В том числе этот флаг позволяет Direct3D оптимизировать свои внутренние процедуры для повышения эффективности, учитывая, что доступ к памяти будет доступны только для чтения.
См. раздел «Использование динамических вершинных и индексных буферов» для получения информации об использовании D3DLOCK_DISCARD или D3DLOCK_NOOVERWRITE для параметра Flags метода IDirect3DVertexBuffer9::Lock.
В C++, так как вы напрямую обращаетесь к памяти, выделенной для буфера вершин, убедитесь, что приложение правильно обращается к выделенной памяти. В противном случае вы рискуете сделать эту память недействительной. Используйте шаг формата данных вершин, который ваше приложение применяет для перехода от одной вершины в выделенном буфере к другой. Память буфера вершин — это простой массив вершин, указанных в FVF. Используйте шаг в зависимости от выбранной структуры формата вершин. Вы можете вычислить шаг каждой вершины в процессе выполнения, проверив D3DFVF, содержащиеся в описании буфера вершин. В следующей таблице показан размер каждого компонента вершины.
| Флаг формата вершин | Размер |
|---|---|
| D3DFVF_DIFFUSE | размер(DWORD) |
| D3DFVF_NORMAL | sizeof(float) x 3 |
| D3DFVF_SPECULAR | sizeof(DWORD) |
| D3DFVF_TEXn | sizeof(float) × n |
| D3DFVF_XYZ | sizeof(float) x 3 |
| D3DFVF_XYZRHW | Размер (в байтах) числа с плавающей запятой (float) умножить на 4 |
Число координат текстур, присутствующих в формате вершины, описывается флагами D3DFVF_TEX n (где n — значение от 0 до 8). Умножьте количество наборов координат текстуры на размер одного набора координат текстуры, который может варьироваться от одного до четырех с плавающей запятой, чтобы вычислить память, необходимую для этого количества координат текстуры.
Используйте общий шаг вершины для увеличения и уменьшения указателя памяти по мере необходимости для доступа к определенным вершинам.
Получение описаний буфера вершин
Вы можете получить сведения о буфере вершин, вызвав метод IDirect3DVertexBuffer9::GetDesc. Этот метод заполняет элементы структуры D3DVERTEXBUFFER_DESC сведениями о буфере вершин.
Связанные разделы