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; }
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 }