private void CommandTri2(uint w0, uint w1)
        {
            /* Tri2 */
            int[] idxs = new int[]
            {
                (int)((w0 & 0x00FF0000) >> 16) >> 1, (int)((w0 & 0x0000FF00) >> 8) >> 1, (int)(w0 & 0x000000FF) >> 1,
                (int)((w1 & 0x00FF0000) >> 16) >> 1, (int)((w1 & 0x0000FF00) >> 8) >> 1, (int)(w1 & 0x000000FF) >> 1
            };

            foreach (int idx in idxs)
            {
                if (idx >= VertexBuffer.Length)
                {
                    return;
                }
            }
            General.RenderTriangles(this, idxs);

            if (ActiveGLDL != null)
            {
                if (ActiveGLDL.Peek() != null)
                {
                    ActiveGLDL.Peek().Triangles.Add(new OpenGLHelpers.DisplayListEx.Triangle(VertexBuffer[idxs[0]], VertexBuffer[idxs[1]], VertexBuffer[idxs[2]]));
                }
                if (ActiveGLDL.Peek() != null)
                {
                    ActiveGLDL.Peek().Triangles.Add(new OpenGLHelpers.DisplayListEx.Triangle(VertexBuffer[idxs[3]], VertexBuffer[idxs[4]], VertexBuffer[idxs[5]]));
                }
            }

            LastTriList.Add(new SimpleTriangle(VertexBuffer[idxs[0]].Position, VertexBuffer[idxs[1]].Position, VertexBuffer[idxs[2]].Position));
            LastTriList.Add(new SimpleTriangle(VertexBuffer[idxs[3]].Position, VertexBuffer[idxs[4]].Position, VertexBuffer[idxs[5]].Position));
        }
        public void ResetCaches()
        {
            ResetTextureCache();

            if (Configuration.CombinerType == CombinerTypes.ArbCombiner && arbCombiner != null)
            {
                arbCombiner.ResetFragmentCache();
            }

            if (LastTriList != null)
            {
                LastTriList.Clear();
            }
        }