C# XNA/Mono Effect引发运行时强制转换异常

C# XNA/Mono Effect引发运行时强制转换异常,c#,xna,monogame,C#,Xna,Monogame,作为前言,完全相同的代码在XNA中运行良好,但Monogame抛出了一个例外。这可能需要熟悉Monogame渲染管道的人员 在我的游戏的绘制部分,有一个阴影贴图分解器,它渲染出一个纹理,这是根据给定灯光计算出的最终灯光图案。当从本质上是EffectPass.Apply()的对象进行渲染时,它接收到一个异常,该对象抱怨从Mono中的某个位置尝试从int32[]转换到Single[]。以下是我调用它的代码: private void ExecuteTechnique(Texture2D源、Rende

作为前言,完全相同的代码在XNA中运行良好,但Monogame抛出了一个例外。这可能需要熟悉Monogame渲染管道的人员

在我的游戏的绘制部分,有一个阴影贴图分解器,它渲染出一个纹理,这是根据给定灯光计算出的最终灯光图案。当从本质上是
EffectPass.Apply()
的对象进行渲染时,它接收到一个异常,该对象抱怨从Mono中的某个位置尝试从
int32[]
转换到
Single[]
。以下是我调用它的代码:

private void ExecuteTechnique(Texture2D源、RenderTarget2D目标、,
字符串技术名称,纹理2D阴影贴图)
{
graphicsDevice.SetRenderTarget(目标);
图形设备。清晰(颜色。透明);
resolveShadowsEffect.Parameters[“renderTargetSizeX”].SetValue((float)baseSizeX);
resolveShadowsEffect.Parameters[“renderTargetSizeY”].SetValue((float)baseSizeY);
如果(源!=null)
resolveShadowsEffect.Parameters[“InputTexture”].SetValue(源);
if(阴影贴图!=null)
resolveShadowsEffect.Parameters[“ShadowMapTexture”].SetValue(阴影贴图);
resolveShadowsEffect.CurrentTechnical=resolveShadowsEffect
.技术[技术名称];
尝试
{
foreach(resolveShadowsEffect.CurrentTechnical.pass中的EffectPass传递)
{

pass.Apply();//不确定这是否对您有帮助,但我看到正在进行的唯一转换是数据作为数组。我敢打赌它正在崩溃:

Buffer.BlockCopy(data as Array, 0, _buffer, offset, rows*columns*elementSize);


因为他们在那里铸造之前不做任何类型检查。如果这是一条线,它会崩溃是因为它们似乎不支持非数组数据值。我对这个框架不太了解,无法给你一个关于如何解决这个问题的可靠答案。我可能会向制造商报告这是一个bug

尝试使用2MGFX工具来优化它es shaders for monogame。

我已经在项目配置中将此工具用作预编译shell命令。不过,感谢您的参考。您可能不想共享该项目,但如果您共享,我可以尝试提供帮助。
Buffer.BlockCopy(data as Array, 0, _buffer, offset, rows*columns*elementSize);
var source = data as Array;