У меня есть дескриптор ID3D11Texture2D, но нет доступа к его ID3D11DeviceContext или ID3D11Device. Я хочу скопировать эту текстуру в другую текстуру на другом ID3D11Device. Текстура не создается с помощью каких-либо флагов обмена. Если я попытаюсь скопировать с ID3D11DeviceContext :: CopyResource, я получаю предупреждение «Параметр D3D11 CORRUPTION не соответствует устройству». Как скопировать текстуру или ее содержимое? Я думаю, это возможно, поскольку, например, OpenVR API использует только обработчик текстуры без какого-либо контекста.Копирование текстуры Direct3D11 на другое устройство D3D11
ответ
Если текстура не создана с помощью флага совместного доступа, вы не можете использовать ее между двумя устройствами.
Но у вас есть объект текстуры, то есть ID3D11DeviceChild
и достаточно, чтобы получить доступ к ID3D11DeviceChild::GetDevice
для извлечения устройства и расширения ID3D11Device::GetImmediateContext
Теперь, когда у вас есть доступ к устройству и контекста, вы можете создайте дополнительную текстуру с флагом обмена D3D11_RESOURCE_MISC_SHARED
на оригинальном устройстве или на своем собственном устройстве и получите обратно объект на другом с помощью ID3D11Device::OpenSharedResource
. И, наконец, скопируйте исходную текстуру в новый объект с помощью CopyResource
Не забывайте, что все тезисы Get
добавляют ссылку на объекты, которые необходимо освободить, когда вы закончите с ними.
Работает как шарм и отлично решает мою проблему. Большое спасибо! – superg
- 1. Direct3D11 GL_RGBA4 эквивалент?
- 2. Отображение Аффинной текстуры в d3d11/hlsl
- 3. Копирование глубины текстуры RGBA текстуры
- 4. SlimDX Direct3D11
- 5. CopyResource от одного устройства D3D11 к другому
- 6. Копирование текстуры в текстуру
- 7. Android-устройство adb другое устройство
- 8. Копирование текстуры в libgdx
- 9. SlimDX Debugging помощь - первый шанс исключение «slimdx.direct3d11.direct3d11 исключение»
- 10. Копирование структуры, содержащей 2d указатель на устройство
- 11. Копирование структуры, содержащей указатели на устройство CUDA
- 12. Отправка уведомления одному устройству на другое устройство
- 13. Bluetooth отправить текст на другое устройство
- 14. Импорт бродячих коробок на другое устройство
- 15. Интеграция Admob на другое устройство Android
- 16. Пересылка трафика на другое устройство C++
- 17. Отправить SQL-таблицу на другое устройство Android
- 18. android HttpRequest на другое устройство Android
- 19. NSData отсутствуют после отправки на другое устройство
- 20. Bluetooth не отправляет файл на другое устройство
- 21. Как отправить push-сообщение на другое устройство?
- 22. Как перенести файл apk на другое устройство
- 23. Копирование одной строки на другое значение строки
- 24. Cubemap проблема текстурирования (D3D11, C++)
- 25. SharpDx direct3d11 как начать рендеринг
- 26. Ошибка 0x80070057, вызывающая VertexShader для Direct3d11
- 27. AS3 копирование замаскированного растрового изображения на другое растровое изображение
- 28. (D3D11) Чтение текста в отдельной теме
- 29. Копирование содержимого текстуры GL_TEXTURE_EXTERNAL_OES в текстуру GL_TEXTURE_2D
- 30. Direct3D11: Обмен текстурой между устройствами: черная текстура
Если вы не используете совместное использование, вам необходимо скопировать его обратно через память CPU, которая будет очень медленной. –
@ChuckWalbourn Чтобы скопировать текстуру в CPU, мне нужно было скопировать ее в промежуточную текстуру сначала? И для этого мне понадобится контекст устройства, которого у меня нет? – superg
Вы не можете делать копии без непосредственного контекста устройства. –