Слишком много уникальных государственных объектов? - PullRequest
0 голосов
/ 25 октября 2018

Итак, я столкнулся с проблемой DirectX, и выдается исключение, как описано:

D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS
0x887C0001

The application has exceeded the maximum number of unique state objects per Direct3D device. 
The limit is 4096 for feature levels up to 11.1

И не могу найти документацию по этой проблеме.Для справки, только 3 модели выводятся на экран с помощью MonEgame BasicEffect, каждая модель имеет менее 50 полигонов.

Как это происходит и как можно решить?

1 Ответ

0 голосов
/ 26 октября 2018

Это было исправление, которое я нашел наиболее эффективным:

static void Render(GraphicsDevice gd, ModelMesh mesh) {
    gd.RasterizerState = RasterizerState.CullNone;

    for (int i = 0; i < mesh.MeshParts.Count; i++) {
        int vertexCount = mesh.MeshParts[i].NumVertices;
        VertexBuffer vb = mesh.MeshParts[i].VertexBuffer;
        IndexBuffer ib = mesh.MeshParts[i].IndexBuffer;

        gd.SetVertexBuffer(vb);
        gd.Indices = ib;

        EffectPass pass = mesh.MeshParts[i].Effect.CurrentTechnique.Passes[0];
        pass.Apply();
        int startIndex = mesh.MeshParts[i].StartIndex;
        int primitiveCount = mesh.MeshParts[i].PrimitiveCount;

        gd.DrawInstancedPrimitives(PrimitiveType.TriangleList, 0, startIndex, primitiveCount, 0);
    }
...