从 RGBA (const char*) 缓冲区创建 DirectX9Texture

Create DirectX9Texture from RGBA (const char*) buffer

我有一个RGBA格式的图像缓冲区,我需要将其转换为DirectX9Texture,我在网上搜索了很多次,但没有任何结果。

我正在尝试将 Awesomium 集成到我的 DirectX9 应用程序中。换句话说,尝试在 DirectX 表面上显示网页。是的,我尝试创建自己的表面 class,但没有成功。

我知道答案不能太长,所以如果你手下留情,也许你可以link我去一些正确的地方?

你不能直接创建一个表面,你必须创建一个纹理,然后使用它的表面。尽管出于您的目的,您不需要直接访问表面。

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)。