unsafe public void clearJacobianMap() { if (m_fxJacobian == null)// || mSynthesiser == null) { return; } Vector4 tr = new Vector4(0, 0, (float)m_iBuffersWidth, (float)m_iBuffersHeight); // save render target D3DProtectRenderTarget locktarget = new D3DProtectRenderTarget(true); // set new render target BRenderDevice.getDevice().SetRenderTarget(0, mJacobianMapSrf); BRenderDevice.getDevice().SetRenderTarget(1, mJacobianMapInverseSrf); savedDepthSten = BRenderDevice.getDevice().DepthStencilSurface; BRenderDevice.getDevice().DepthStencilSurface = m_DepthStencilSurface; // render BRenderDevice.getDevice().BeginScene(); { BRenderDevice.getDevice().Clear(ClearFlags.Target, Color.Black, 1, 0); m_fxJacobian.Technique = m_fxJacobianClearTech; m_fxJacobian.SetValue(m_fxJacobianGlobalScale, mExemplar == null?0:mExemplar.mSynthParams.TextureScale); m_fxJacobian.SetValue(m_fxJacobianSelectedJMap, (int)mJMapPattern); m_fxJacobian.SetValue(m_fxJacobianViewport, tr); m_fxJacobian.CommitChanges(); m_fxJacobian.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState); m_fxJacobian.BeginPass(0); m_QuadDual.render(); m_fxJacobian.EndPass(); m_fxJacobian.End(); BRenderDevice.getDevice().EndScene(); } m_bNeedUpdate = true; BRenderDevice.getDevice().DepthStencilSurface = savedDepthSten; savedDepthSten.Dispose(); savedDepthSten = null; BRenderDevice.getDevice().SetRenderTarget(1, null); BRenderDevice.getDevice().SetTexture(0, null); locktarget.destroy(); locktarget = null; // BRenderDevice.writeTextureToFile(mJacobianMap, AppDomain.CurrentDomain.BaseDirectory + "screens\\localFrames.bmp"); // BRenderDevice.writeTextureToFile(mJacobianMapInverse, AppDomain.CurrentDomain.BaseDirectory + "screens\\localFramesINV.bmp"); }
public void renderFull(int w, int h) { Vector4 v = new Vector4(0, 0, (float)w, (float)h); mShader.SetValue(m_fxViewport, v); Vector4 v2 = new Vector4(0, 0, 0, 0); mShader.SetValue(m_fxDestRegionCoord, v2); Vector4 v3 = new Vector4((float)w, (float)h, 0, 0); mShader.SetValue(m_fxDestRegionSize, v3); Vector4 v4 = new Vector4(1.0f / (float)w, 1.0f / (float)h, 0, 0); mShader.SetValue(m_fxInvDestRegionSize, v4); Viewport vp = new Viewport(); vp.X = 0; vp.Y = 0; vp.Width = w; vp.Height = h; vp.MinZ = 0; vp.MaxZ = 1; BRenderDevice.getDevice().Viewport = vp; mShader.CommitChanges(); BRenderDevice.beginScene(); mShader.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState); mShader.BeginPass(0); s_Quad.render(); mShader.EndPass(); mShader.End(); BRenderDevice.endScene(); }
public void paintAt(int mx, int my) { // save render target D3DProtectRenderTarget locktarget = new D3DProtectRenderTarget(true); float dx = (float)(mx - m_iAnchorX); float dy = (float)(my - m_iAnchorY); float l = (float)Math.Sqrt(dx * dx + dy * dy); if (l < 0.01) { return; } dx /= l; dy /= l; dx = dx * 127.0f + 128.0f; dy = dy * 127.0f + 128.0f; int r = 0, g = 0, b = 0, a = 0; if (mJMapPattern == eJMapPattern.cPaint) { if (mPaintOrientation && mPaintScale) { r = (int)(dx); g = (int)(dy); b = (int)(Math.Max(0.0f, Math.Min(255.0f, 255.0f * (1.0f - m_fInnerRadius)))); } else if (mPaintOrientation) { r = (int)(dx); g = (int)(dy); b = 0; } else if (mPaintScale) { r = 0x80; g = 0xFF; b = (int)(Math.Max(0.0f, Math.Min(255.0f, 255.0f * (1.0f - m_fInnerRadius)))); } } a = 0xff; Matrix mat, mattrl, matscl; float tx = mx / (float)(m_iSynthWidth); // (m_dwCreationWidth); float ty = my / (float)(m_iSynthHeight); // (m_dwCreationHeight); mattrl = Matrix.Translation(tx - m_fInnerRadius / 2.0f, ty - m_fInnerRadius / 2.0f, 0.0f); matscl = Matrix.Scaling(m_fInnerRadius, m_fInnerRadius, 0.0f); mat = Matrix.Multiply(matscl, mattrl); BRenderDevice.getDevice().SetTransform(TransformType.View, mat); BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, true); BRenderDevice.getDevice().SetRenderState(RenderStates.BlendOperation, (int)BlendOperation.Add); BRenderDevice.getDevice().SetRenderState(RenderStates.DestinationBlend, (int)Blend.InvSourceAlpha); BRenderDevice.getDevice().SetRenderState(RenderStates.SourceBlend, (int)Blend.SourceAlpha); BRenderDevice.getDevice().SetTexture(0, m_d3dSplat.mTexture); BRenderDevice.getDevice().SetRenderState(RenderStates.TextureFactor, (a << 24) + (r << 16) + (g << 8) + b); BRenderDevice.getDevice().SetTextureStageState(0, TextureStageStates.ColorArgument2, (int)TextureArgument.TFactor); // set new render target BRenderDevice.getDevice().SetRenderTarget(0, m_d3dPaintLayerSrf); // render BRenderDevice.getDevice().BeginScene(); m_Quad.render(); BRenderDevice.getDevice().EndScene(); // restore state BRenderDevice.getDevice().SetTransform(TransformType.View, Matrix.Identity); BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, false); BRenderDevice.getDevice().SetRenderState(RenderStates.BlendOperation, (int)BlendOperation.Add); BRenderDevice.getDevice().SetRenderState(RenderStates.TextureFactor, 0xFFFFFFFF); BRenderDevice.getDevice().SetTextureStageState(0, TextureStageStates.ColorArgument2, (int)TextureArgument.Current); // restore render target locktarget.destroy(); locktarget = null; }