Método ID3D11DeviceContext::Map (d3d11.h)
Obtiene un puntero a los datos contenidos en un subrecurso y deniega el acceso de GPU a ese subrecurso.
Sintaxis
HRESULT Map(
[in] ID3D11Resource *pResource,
[in] UINT Subresource,
[in] D3D11_MAP MapType,
[in] UINT MapFlags,
[out, optional] D3D11_MAPPED_SUBRESOURCE *pMappedResource
);
Parámetros
[in] pResource
Tipo: ID3D11Resource*
Puntero a una interfaz ID3D11Resource .
[in] Subresource
Tipo: UINT
Número de índice del subrecurso.
[in] MapType
Tipo: D3D11_MAP
Valor de tipo D3D11_MAP que especifica los permisos de lectura y escritura de la CPU para un recurso.
[in] MapFlags
Tipo: UINT
Marca que especifica lo que hace la CPU cuando la GPU está ocupada. Esta marca es opcional.
[out, optional] pMappedResource
Tipo: D3D11_MAPPED_SUBRESOURCE*
Puntero a la estructura D3D11_MAPPED_SUBRESOURCE del subrecurso asignado. Consulte la sección Comentarios sobre punteros NULL.
Valor devuelto
Tipo: HRESULT
Este método devuelve uno de los códigos de retorno de Direct3D 11.
Este método también devuelve DXGI_ERROR_WAS_STILL_DRAWING si MapFlags especifica D3D11_MAP_FLAG_DO_NOT_WAIT y la GPU aún no ha terminado con el recurso.
Este método también devuelve DXGI_ERROR_DEVICE_REMOVED si MapType permite el acceso de lectura de cpu y se ha quitado la tarjeta de vídeo.
Para obtener más información sobre estos códigos de error, consulte DXGI_ERROR.
Comentarios
Si llama a Map en un contexto diferido, solo puede pasar D3D11_MAP_WRITE_DISCARD, D3D11_MAP_WRITE_NO_OVERWRITE o ambos al parámetro MapType . No se admiten otros valores con tipo D3D11_MAP para un contexto diferido.
Punteros NULL para pMappedResource
El parámetro pMappedResource puede ser NULL cuando se proporciona una textura que se creó con D3D11_USAGE_DEFAULT y se llama a la API en un contexto inmediato. Esto permite asignar una textura predeterminada, incluso si se creó mediante D3D11_TEXTURE_LAYOUT_UNDEFINED. Después de esta llamada API, se puede tener acceso a la textura mediante ID3D11DeviceContext3::WriteToSubresource o ID3D11DeviceContext3::ReadFromSubresource.No lea de un subrecurso asignado para escribir
Al pasar D3D11_MAP_WRITE, D3D11_MAP_WRITE_DISCARD o D3D11_MAP_WRITE_NO_OVERWRITE al parámetro MapType , debes asegurarte de que la aplicación no lee los datos de subrecursos a los que apunta el miembro pData de D3D11_MAPPED_SUBRESOURCE porque hacerlo puede provocar una penalización significativa del rendimiento. La región de memoria a la que se pueden asignar puntos pData con PAGE_WRITECOMBINE y la aplicación debe respetar todas las restricciones asociadas a dicha memoria.Incluso el siguiente código de C++ puede leer de la memoria y desencadenar la penalización de rendimiento porque el código puede expandirse al siguiente código de ensamblado x86.
Código de C++:
*((int*)MappedResource.pData) = 0;
Código de ensamblado x86:
AND DWORD PTR [EAX],0
Use la configuración de optimización y las construcciones de lenguaje adecuadas para ayudar a evitar esta penalización de rendimiento. Por ejemplo, puede evitar la optimización de xor mediante un puntero volátil o mediante la optimización de la velocidad del código en lugar del tamaño del código.
Windows Phone 8: se admite esta API.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | d3d11.h |
Library | D3D11.lib |