UpdateSubresource 如何知道要复制多少?
How does UpdateSubresource knows how much to copy?
我正在尝试从 C++ 将图像复制到 Unity 纹理。图片为 320x240px,格式为 RGBA。我已经确认图片没问题。
要复制,我使用 UpdateSubresource,代码如下:
GraphicDeviceD3D11* gdevice = (GraphicDeviceD3D11*)graphic_device;
ID3D11DeviceContext* ctx = NULL;
gdevice->d3d11device->lpVtbl->GetImmediateContext(gdevice->d3d11device, &ctx);
if (texturePointer) {
ctx->lpVtbl->UpdateSubresource(ctx, (ID3D11Resource *)texturePointer, 0, NULL, image, imageWidth * 4, 0);
}
ctx->lpVtbl->Release(ctx);
我算不上 d3d11 专家,不确定我是否正确使用了这个功能。给UpdateSubresource的图片参数只有图片缓冲区指针和步幅,没有图片的高度OR缓冲区的长度。
UpdateResource 如何知道何时停止复制?
此代码适用于某些图像,但不适用于其他图像 - 它会引发内存访问冲突,超出图像缓冲区大小 - 所以这暗示我我没有在某处设置限制.
有人可以解释一下吗?
您正在正确使用该函数 - 目标资源(在您的情况下由 texturePointer
引用)包含所有必需的数据,该方法将按预期工作。
但是,这个 lpVtbl
间接寻址是做什么用的?如果您使用的是 c++(而不是 c),您可能应该坚持使用简单的 pInstance->Method()
方法来调用 COM 方法。
我正在尝试从 C++ 将图像复制到 Unity 纹理。图片为 320x240px,格式为 RGBA。我已经确认图片没问题。
要复制,我使用 UpdateSubresource,代码如下:
GraphicDeviceD3D11* gdevice = (GraphicDeviceD3D11*)graphic_device;
ID3D11DeviceContext* ctx = NULL;
gdevice->d3d11device->lpVtbl->GetImmediateContext(gdevice->d3d11device, &ctx);
if (texturePointer) {
ctx->lpVtbl->UpdateSubresource(ctx, (ID3D11Resource *)texturePointer, 0, NULL, image, imageWidth * 4, 0);
}
ctx->lpVtbl->Release(ctx);
我算不上 d3d11 专家,不确定我是否正确使用了这个功能。给UpdateSubresource的图片参数只有图片缓冲区指针和步幅,没有图片的高度OR缓冲区的长度。
UpdateResource 如何知道何时停止复制?
此代码适用于某些图像,但不适用于其他图像 - 它会引发内存访问冲突,超出图像缓冲区大小 - 所以这暗示我我没有在某处设置限制.
有人可以解释一下吗?
您正在正确使用该函数 - 目标资源(在您的情况下由 texturePointer
引用)包含所有必需的数据,该方法将按预期工作。
但是,这个 lpVtbl
间接寻址是做什么用的?如果您使用的是 c++(而不是 c),您可能应该坚持使用简单的 pInstance->Method()
方法来调用 COM 方法。