/// <summary> /// 设置渲染缓冲区的视口尺寸和其他属性。 /// 渲染是双缓冲的。当调用 present() 方法时,后台缓冲区与可见的前台缓冲区交换。 /// 缓冲区的最小大小为 32 x 32 像素。 /// 配置缓冲区是一个缓慢的操作。在正常渲染操作期间,请避免更改缓冲区大小或属性。 /// /// </summary> public void configureBackBuffer(int width, int height, IRenderTargetAdapter renderBufferAdapter) { if (width < 32 || height < 32 || width % 2 != 0 || height % 2 != 0) { throw new ArgumentException("缓冲区的最小大小为 32 x 32 像素,并且必须是偶数"); } this.programConstants = new ProgramConstants(); this.quadFragementUnit = new QuadFragementUnit(); this.renderBufferAdapter = renderBufferAdapter; backBufferWidth = width; backBufferHeight = height; backBufferRenderTarget = new RenderTargetBind(); var backbuffer = new ScreenFrameBuffer(width, height, 1, 1); backBufferRenderTarget.renderTarget = backbuffer; backBufferRenderTarget.zBuffer = new ZBuffer(backbuffer.rt_width, backbuffer.rt_height); currentRenderTarget = backBufferRenderTarget; needclearflag = true; _culling = Context3DTriangleFace.NONE; _depthtest_depthMask = true; _depthtest_passCompareMode = Context3DCompareMode.ALWAYS; samplers = new Sampler[8]; for (int i = 0; i < samplers.Length; i++) { samplers[i] = new Sampler(); } if (backbuffer.rt_width == width && backbuffer.rt_height == height) { DebugBuffer = new debugger.FrameDebugBuffer(width, height); } else { DebugBuffer = null; } }
/// <summary> /// 设置用于深度测试的比较类型。 ///像素着色器程序的源像素输出的深度将与深度缓冲区中的当前值进行比较。如果比较计算结果为 false,则丢弃源像素。 ///如果为 true,则呈现管道中的下一步“印模测试”将处理源像素。此外,只要 depthMask 参数设置为 true,就会使用源像素的深度更新深度缓冲区。 ///设置用于比较源像素和目标像素的深度值的测试。当比较为 true 时,源像素与目标像素合成。将比较运算符按该顺序作为源像素值和目标像素值之间的中缀运算符应用。 /// </summary> /// <param name="depthMask"></param> /// <param name="passCompareMode"></param> public void setDepthTest(bool depthMask, Context3DCompareMode passCompareMode) { _depthtest_depthMask = depthMask; _depthtest_passCompareMode = passCompareMode; }