2017-02-07 2 views

ответ

0

Для этого вам просто нужно заменить соответствующее изображение внутри swf, которое будет обертывать текстуру, содержащую ваше видео.

Вам потребуется текстура видео в текстуре из графического API, который вы используете (например, в DirectX 11 вам понадобится ID3D11Texture2D). Вы можете создать изображение обертки Scaleform вокруг этого, используя класс TextureImage. Затем вам нужно найти ресурс в SWF, который вы хотите заменить, и установить изображение обертки в качестве изображения. Наконец, вам нужно позвонить ForceImageUpdate на GFx :: Movie, чтобы распространить изменение текстуры.

ID3D11Texture2D* videoTexture = ...; 
Ptr<GFx::Movie> pMovie = ...; 
Ptr<D3D1x::TextureManager> pmanager = ...; 
Ptr<Render::Texture> scaleformTexture = *pmanager->CreateTexture(videoTexture, ImageSize(width, height)); 
Ptr<TextureImage> scaleformImage = * SF_NEW TextureImage(Image_R8G8B8, scaleformTexture->GetSize(), 0, scaleformTexture); 
ImageResource* pimageRes = (ImageResource*)pMovie->GetMovieDef()->GetResource("name_of_resource"); 
pimageRes->SetImage(scaleformImage); 
pMovie->ForceUpdateImages(); 

При обновлении Базового ID3D11Texture2D (например, с новой рамой) изображение в фильме Scaleform также изменится. Пример того, как это сделать, показан в примере TextureInSWF, который немного более тщателен, чем этот код. Если у вас есть SDK XBoxOne, есть также пример KinectInSWF, в котором показано, как это сделать с помощью камеры Kinect (например, видеокамеры реального времени).

+0

На самом деле, у меня есть проблема с * pmanager-> CreateTexture (videoTexture, ImageSize (ширина, высота)); поскольку в качестве параметра нет функции CreateTexture с типом видеотекста. – SteveTJS

+0

Извините, должно было быть 'ID3D11Texture2D', а не' ID3DTexture2D' (обновлено). – MuertoExcobito

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