예제 #1
0
        public bool LoadExemplar(String fname)
        {
            //load our Analyser
            mExemplar = null;
            mExemplar = new Exemplar(fname);

            //load our synthesiser
            mSynthesiser = null;
            mSynthesiser = new Synthesiser();
            mSynthesiser.loadPrograms(mExemplar, Synthesiser.SynthesisFlags._Standard | Synthesiser.SynthesisFlags._Subpass1234);

            clearPaintLayer();

            mSynthesiser.setExemplarPeriod(mExemplar, true, 1, 1);

            m_bNeedUpdate            = true;
            m_bNeedUpdateJacobianMap = true;
            for (int i = 0; i < mSynthNodes.Count; i++)
            {
                mSynthNodes[i].m_Query = null;
            }

            postLoadCreateControlPackets();

            return(true);
        }
예제 #2
0
        unsafe public void computeD3DPixPackTextures(Synthesiser m_Synthesizer)
        {
            int sz = 0;

            for (int l = 0; l < Globals.cNumLevels /*m_Synthesizer.getAnalyser().nbLevels()*/; l++)
            {
                int csz = Synthesiser.bufferSizeFromWindow(bufferrgn(l));
                sz = Math.Max(csz, sz);
            }

            mD3DPixPackOffsets = new Texture[m_iNbLevels, Globals.cNumCorrectionPasses, 4];

            for (int l = 0; l < m_iNbLevels; l++)
            {
                Window window = bufferrgn(l);
                for (int pass = 0; pass < Globals.cNumCorrectionPasses; pass++)
                {
                    for (int sub = 0; sub < 4; sub++)
                    {
                        // . which quadrant to update ?
                        int ai = (m_Synthesizer.m_SubpassesOrderingTbl[pass % Globals.SYNTH_ORDER_NUM_PASSES][sub][0] + window.left()) & 1;
                        int aj = (m_Synthesizer.m_SubpassesOrderingTbl[pass % Globals.SYNTH_ORDER_NUM_PASSES][sub][1] + window.top()) & 1;
                        Globals.Assert(ai >= 0 && aj >= 0);


                        Vector4 qszs = m_Synthesizer.bufferSize(sz);

                        mD3DPixPackOffsets[l, pass, sub] = new Texture(BRenderDevice.getDevice(), 5, 5, 1, 0, Format.G16R16F, Pool.Managed);
                        GraphicsStream texstream = mD3DPixPackOffsets[l, pass, sub].LockRectangle(0, LockFlags.None);
                        ushort *       data      = (ushort *)texstream.InternalDataPointer;
                        int            rectPitch = 5 * 2;

                        for (int x = 0; x < 5; x++)
                        {
                            for (int y = 0; y < 5; y++)
                            {
                                int     ox = x - 2;
                                int     oy = y - 2;
                                int     fx = (int)Math.Floor((ox + ai) / 2.0f);
                                int     fy = (int)Math.Floor((oy + aj) / 2.0f);
                                Vector4 vq = new Vector4(
                                    ((float)(fx + (sz >> 1) * ox) + ai * (sz >> 1)) / qszs.X,
                                    ((float)(fy + (sz >> 1) * oy) + aj * (sz >> 1)) / qszs.Y,
                                    0, 0);
                                //offs[x + y * 5] = vq;

                                int     srcIndex = x * 2 * sizeof(byte) + y * rectPitch;
                                float16 xx       = new float16(vq.X);
                                float16 yy       = new float16(vq.Y);
                                data[srcIndex]     = xx.getInternalDat();
                                data[srcIndex + 1] = yy.getInternalDat();
                            }
                        }

                        mD3DPixPackOffsets[l, pass, sub].UnlockRectangle(0);
                    }
                }
            }
        }
예제 #3
0
        public SynthesisQuery(Synthesiser synth, SynthesizeParameters parms)
        {
            m_Synthesizer = (synth);
            m_iLevel      = (-1);
            m_Params      = (parms);

            //m_Params.mControlPacket.updateSynthWindow();

            // allocate buffers
            allocateBuffers();

            // set current level to start synthesis at coarsest
            m_iLevel = Globals.cNumLevels;
        }
예제 #4
0
        public void loadPrograms()
        {
            Macro [] defines = new Macro[16];
            int      nbdef;

            nbdef = 0;
            Synthesiser.addDefaultDefines(ref defines, ref nbdef);
            Synthesiser.endDefine(ref defines, ref nbdef);

            m_fxJacobian           = ShaderManager.loadShader(AppDomain.CurrentDomain.BaseDirectory + "shaders\\jacobian.fx", null);
            m_fxJacobianClearTech  = m_fxJacobian.GetTechnique("t_identity");
            m_fxJacobianSelectTech = m_fxJacobian.GetTechnique("t_selected");
            m_fxGeomPaintJMapTech  = m_fxJacobian.GetTechnique("t_paint_jmap");

            m_fxJacobianViewport     = m_fxJacobian.GetParameter(null, "Viewport");
            m_fxJacobianGlobalScale  = m_fxJacobian.GetParameter(null, "GlobalScale");
            m_fxJacobianSelectedJMap = m_fxJacobian.GetParameter(null, "SelectedJMap");

            m_fxGeomGlobalScale           = m_fxJacobian.GetParameter(null, "GlobalScale");
            m_fxGeomPaintedJMap           = m_fxJacobian.GetParameter(null, "PaintedJMap");
            m_fxGeomExemplarMainDirection = m_fxJacobian.GetParameter(null, "ExemplarMainDirection");
        }
예제 #5
0
        void allocateBuffers()
        {
            int maxsz = 0;


            // allocate level's buffers
            m_SynthBuffers = new List <single_buffer>(Globals.cNumLevels);//m_Synthesizer.getAnalyser().nbLevels());
            for (int l = 0; l < Globals.cNumLevels /*m_Synthesizer.getAnalyser().nbLevels()*/; l++)
            {
                int sz = Synthesiser.bufferSizeFromWindow(m_Params.mControlPacket.m_Windows.bufferrgn(l));
                maxsz = Math.Max(maxsz, sz);
                m_SynthBuffers.Add(new single_buffer());
                m_SynthBuffers[l].create(sz);
            }


            // allocate double buffer
            m_WorkBuffer.create(maxsz);

            // allocate depth-stencil buffer
            m_DepthStencilSurface = BRenderDevice.getDevice().CreateDepthStencilSurface(maxsz, maxsz, DepthFormat.D24S8, MultiSampleType.None, 0, true);
        }