XNA .GetData 给出模型的 AccessViolationExceptions 纹理

XNA .GetData gives AccessViolationExceptions texture of model

我遇到了 texture.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,显然我不允许读取模型上的纹理? 有人知道如何解决这个问题吗?

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

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

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

如果您可以在您的模型处理器上禁用 mipmap 生成和纹理压缩,那么这样做可以立即解决这个问题。但是,如果您需要压缩和 mipmap,使这项工作有效的解决方案会变得更加复杂。