Профиль XNA Reach с VMWare - не работают вершинные буферы? - PullRequest
1 голос
/ 29 декабря 2010

Запуск приложения XNA с использованием профиля Reach в хост-системе VMWare Fusion Mac OSX, виртуальной машиной является Windows XP SP 3 (моя ОС с двойной загрузкой). Работает на MacBook Pro с графической картой NVidia 320M

Когда я загружаюсь в XP, мой код работает. Код рисует кубы, которые настроены с использованием буферов вершин

Когда другой друг запускает этот же код в Windows 7, он также отлично работает у него

Когда я запускаю свой код в ВМ, он не работает. У меня в шейдерной программе запущены рекламные спрайты, и эта часть отображается нормально. Я не получаю сбоев или ошибок, геометрия просто не появляется. Я попробовал Debug и Release. Это очень простая операция, поэтому я думаю, что проблема не в VMWare, а в моем коде ....

Кроме того, если я переключаю мои DrawIndexedPrimitives на DrawUserIndexPrimitives (используя объекты памяти вместо буферов вершин), все работает нормально ... Приемлемым решением было бы узнать, как я могу запросить оборудование, чтобы выяснить, будет ли это работать или не работать так что мой код может условно использовать объекты памяти или буферы вершин.

Мой код инициализации:

  var vertexArray = verts.ToArray();
  var indexArray = indices.ToArray();

  indexBuffer = new IndexBuffer(GraphicsDevice, typeof(Int16), indexArray.Length, BufferUsage.WriteOnly);
  indexBuffer.SetData(indexArray);

  vertexBuffer = new VertexBuffer(GraphicsDevice, typeof(VertexPositionColor), vertexArray.Length,
    BufferUsage.WriteOnly);
  vertexBuffer.SetData(vertexArray);

Код My Draw:

 // problem isn't here, tried no cull
  GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;
  GraphicsDevice.BlendState = BlendState.AlphaBlend;
  GraphicsDevice.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true };
// Update View and Projection
  TileEffect.View = ((Game1)Game).Camera.View;
  TileEffect.Projection = ((Game1)Game).Camera.Projection;

  TileEffect.CurrentTechnique.Passes[0].Apply();

  GraphicsDevice.SetVertexBuffer(vertexBuffer);
  GraphicsDevice.Indices = indexBuffer;

  GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, indices.Count, 0, indices.Count / 3);

Для LoadContent:

 TileEffect = new BasicEffect(GraphicsDevice)
  {
    World = Matrix.Identity,
    View = ((Game1)Game).Camera.View,
    Projection = ((Game1)Game).Camera.Projection,
    VertexColorEnabled = true
  };

Ответы [ 2 ]

0 голосов
/ 19 января 2011

Переход от индикаторов решил проблему, хотя я до сих пор не знаю, почему это будет ..

0 голосов
/ 29 декабря 2010

Вы должны понимать, что запуск этого на виртуальной машине, размещенной на MAC, не полностью поддерживаемый сценарий.Я предполагаю, что может быть какая-то особенность с некоторым состоянием, которое вы должны установить, чтобы оно работало с vmware, но мне это не сразу понятно ... вы правы, это довольно простая операция: - /

...