我试图将图像从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的图像参数只是图像缓冲区指针和步幅,而不是图像的高度或缓冲区的长度。
UpdateResource如何知道何时停止复制?
这段代码对我来说对某些图片很有用,但对其他人来说并不起作用 - 它会在内存上引发一个超出图像缓冲区大小的访问冲突 - 这样就暗示我没有设置在某处限制。
有人可以对此有所了解吗?
答案 0 :(得分:2)
您正在使用该功能 - 目标资源(在您的情况下由Duration
引用)包含所有必需的数据,该方法将按预期工作。
然而,这个texturePointer
间接是什么?如果您使用的是c ++(而不是c),那么您可能应该使用简单的lpVtbl
方法来调用COM方法。