예제 #1
0
        public bool IsInDisplayGroup(DrawGroup disp)
        {
            if (AlwaysVisible || disp.AlwaysVisible)
            {
                return(true);
            }
            bool isAllZero = true;

            for (int i = 0; i < Drawgroups.Length && i < disp.Drawgroups.Length; i++)
            {
                if ((Drawgroups[i] & disp.Drawgroups[i]) != 0)
                {
                    return(true);
                }
                if (Drawgroups[i] != 0)
                {
                    isAllZero = false;
                }
            }
            if (isAllZero)
            {
                return(true);
            }
            return(false);
        }
예제 #2
0
        public void ProcessSceneVisibility(RenderFilter filter, DrawGroup dispGroup)
        {
            bool alwaysVis = dispGroup != null ? dispGroup.AlwaysVisible : true;

            for (int i = 0; i < SYSTEM_SIZE; i++)
            {
                if (cCulled[i])
                {
                    continue;
                }

                if ((cSceneVis[i]._renderFilter & filter) == 0)
                {
                    cCulled[i] = true;
                    continue;
                }

                if (!alwaysVis && cSceneVis[i]._drawGroup != null && !cSceneVis[i]._drawGroup.IsInDisplayGroup(dispGroup))
                {
                    cCulled[i] = true;
                }
            }
        }