XNA .GetData给出了模型的AccessViolationExceptions纹理

时间:2017-01-20 16:25:57

标签: c# visual-studio xna monogame

我遇到了纹理问题.GetData,是AccessViolationExcpetions的原因。

我试图做以下事情:

Texture2D texture;
foreach (var mesh in model.Meshes)
     foreach (BasicEffect effect in mesh.Effects)
           texture = effect.Texture;

texture = ((BasicEffect)model.Meshes[0].Effects[0]).Texture;

然后:

Color[] data = new Color[texture.Width * texture.Height];
texture.GetData(data);
for (int i = 0; i < data.Length - 1; i++)
  {
    if (IsSimilar(data[i], new Color(58, 59, 248), 40, 40, 40))
        data[i] = Color.Red;
  }
  texture.SetData(data);

foreach (var mesh in model.Meshes)
  {
     foreach (BasicEffect effect in mesh.Effects)
     effect.Texture = texture;
  }

但是在texture.GetData(data)它会抛出一个AccessViolationException,显然我不允许读取模型上的纹理? 有人知道如何解决这个问题吗?

如果我只是用加载的纹理尝试它一切正常,但因为我们正在处理许多不同的模型。找出模型需要的纹理,然后重新着色纹理并应用它将是一件很麻烦的事。

1 个答案:

答案 0 :(得分:0)

纹理的格式是什么?它有mimaps吗?

我希望普通模型在处理后使用mipmap压缩纹理。因此,传递给GetData的数组可能是错误的类型和错误的长度。

如果您可以在模型处理器上禁用mipmap生成和纹理压缩,请执行此操作以立即解决此问题。但是,如果你需要压缩和mipmap,这个工作的解决方案会变得更加复杂。