Создать DirectX9Texture из буфера RGBA (const char *)

У меня есть буфер изображения в формате RGBA, и мне нужно преобразовать его в текстуру DirectX9, я много раз искал в интернете, но ничего хорошего не нашел.

Я пытаюсь интегрировать Awesomium в мое приложение DirectX9. Другими словами, пытаясь отобразить веб-страницу на поверхности DirectX. И да, я пытался создать свой собственный класс поверхности, без успеха.

Я знаю, что anwsers не может быть слишком длинным, поэтому, если вы помилуете, может быть, вы можете связать меня с некоторыми правильными местами?

0

Решение

Вы не можете создать поверхность напрямую, вы должны создать текстуру, а затем использовать ее поверхность. Хотя для ваших целей вам не нужно иметь прямой доступ к поверхности.

IDirect3DDevice9* device = ...;
// Create a texture: http://msdn.microsoft.com/en-us/library/windows/desktop/bb174363(v=vs.85).aspx
// parameters should be fairly obvious from your input data.
IDirect3DTexture9* tex;
device->CreateTexture(w, h, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &tex, 0);
// Lock the texture for writing: http://msdn.microsoft.com/en-us/library/windows/desktop/bb205913(v=vs.85).aspx
D3DLOCKED_RECT rect;
tex->LockRect(0, &rect, 0, D3DLOCK_DISCARD);
// Write your image data to rect.pBits here. Note that each scanline of the locked surface
// may have padding, the rect.Pitch will tell you how many bytes each scanline expects. You
// should know what the pitch of your input data is. Also, if your image data is in RGBA, you
// will have to swizzle it to ARGB, as D3D9 does not have a RGBA format.

// Unlock the texture so it can be used.
tex->UnlockRect(0);

Этот код также игнорирует любые ошибки, которые могут возникнуть в результате этих вызовов функций. В рабочем коде вы должны проверять любые возможные ошибки (например, из CreateTexture и LockRect).

0

Другие решения