Beispiel #1
0
        public void Dispose()
        {
            GC.SuppressFinalize(this);

            if (frontBuffer != null)
            {
                frontBuffer.Dispose();
                frontBuffer = null;
            }
            if (FrameBuffer != null)
            {
                FrameBuffer.Dispose();
                FrameBuffer = null;
            }
            if (Rasterizer != null)
            {
                Rasterizer.Dispose();
                Rasterizer = null;
            }
            if (ShaderData != null)
            {
                ShaderData.Dispose();
                ShaderData = null;
            }
            if (ShaderMgr != null)
            {
                ShaderMgr.Dispose();
                ShaderMgr = null;
            }

            Shader         = null;
            UsingSubShader = null;
            UsingPass      = null;
        }
Beispiel #2
0
        public void Present()
        {
            // draw call
            if (curVertexBuffer == null)
            {
                throw new Exception("current vertex buffer not binding.");
            }
            if (curIndexBuffer == null)
            {
                throw new Exception("current index buffer not binding.");
            }

            var subShaderCount = Shader.SubShaderList.Count;

            for (int i = 0; i < subShaderCount; i++)
            {
                var subshader = Shader.SubShaderList[i];
                if (!subshader.IsSupported)
                {
                    continue;                                   // 找到第一个可支持的sub shader,并使用它
                }
                UsingSubShader = subshader;
                break; // Is Supported == true;
            }

            var jLen = UsingSubShader.passList.Count;

            for (int j = 0; j < jLen; j++)                      // 遍历所有的pass
            {
                if (UsingSubShader.passList[j].Actived)
                {
                    UsingPass            = UsingSubShader.passList[j];
                    Rasterizer.DrawState = UsingPass.State;
                    Pipeline();                                 // 单次绘制管线
                }
            }

#if DOUBLE_BUFF
            bufferDirty = true;
#endif
        }