2013-04-04 2 views

ответ

1

Причина, по которой они проголосовали, - это потому, что кажется, что вы не приложили никаких усилий для небольшого поиска Google.

Ответ: DirectX обычно передает данные из системной памяти в видеопамять при вызове методов создания. Примером метода создания является «ID3D11Device :: CreateBuffer». Для этого метода требуется указатель на расположение памяти, где данные, поэтому они могут быть скопированы из ОЗУ системы в видеопамять. Однако, если указатель, который передается, является нулевым указателем, он просто устанавливает объем пространства в сторону, чтобы вы могли его скопировать позже.

Пример:

При создании буфера Dynamic Vertex и не передают данные в на первом, то вам придется использовать карту/Unmap, чтобы скопировать данные в видеопамять.

// Fill in a buffer description. 
    D3D11_BUFFER_DESC bufferDesc; 
    bufferDesc.Usage   = D3D11_USAGE_DYNAMIC; 
    bufferDesc.ByteWidth  = sizeof(Vertex_dynamic) * m_iHowManyVertices; 
    bufferDesc.BindFlags  = D3D11_BIND_VERTEX_BUFFER; 
    bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; 
    bufferDesc.MiscFlags  = 0; 
    bufferDesc.StructureByteStride = NULL; 

    // Fill in the subresource data. 
    D3D11_SUBRESOURCE_DATA InitData; 
    InitData.pSysMem = &_vData[0]; 
    InitData.SysMemPitch = NULL; 
    InitData.SysMemSlicePitch = NULL; 

    // Create the vertex buffer. 
/*Data is being copyed right now*/ 
m_pDxDevice->CreateBuffer(&bufferDesc, &InitData, &m_pDxVertexBuffer_PiecePos); 
+0

Извините, откуда вы получили этот ответ? он всегда выполняет копирование в методе создания, если указатель не равен NULL? Благодаря! – Yola

+0

Да, это всегда так. Вот почему со статическими буферами вы должны передавать данные при их создании. – Miguel

Смежные вопросы