Запуск приложения 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
};