Exemplo n.º 1
0
        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");
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        //CLM USED FOR EXPORT
        public unsafe void convertLayersToTexturingDataHandle(BTerrainLayerContainer input, List <Texture> tempAlphaTextures, BTerrainCompositeTexture output, int minXVert, int minZVert, int lod, int channelCount)
        {
            //  BTerrainLayerContainer input = node.mLayerContainer;
            //  BTerrainCompositeTexture output = node.getTextureData(lod).mCompositeTexture;

            Viewport vp = new Viewport();

            vp.X      = output.mXPixelOffset;
            vp.Y      = output.mYPixelOffset;
            vp.Width  = output.mWidth;
            vp.Height = output.mWidth;
            vp.MinZ   = 0;
            vp.MaxZ   = 1;
            BRenderDevice.getDevice().Viewport = vp;

            Microsoft.DirectX.Direct3D.Effect shader = TerrainGlobals.getTexturing().mCompositeShader;
            shader.Begin(0);
            shader.BeginPass(0);

            for (int i = 0; i < channelCount; i++)
            {
                for (int k = 0; k < output.mNumMips; k++)
                {
                    //actually render
                    Surface compositeTarget = null;
                    float   scale           = 1;

                    try
                    {
                        if (output.UsingAtlas == false)
                        {
                            compositeTarget = output.mTextures[i].GetSurfaceLevel(k);
                            BRenderDevice.getDevice().SetRenderTarget(0, compositeTarget);
                        }
                        else
                        {
                            BTerrainCompositeAtlasTexture atlas = output.mAtlas;

                            if (atlas.mTextures[i].Disposed == true)
                            {
                                atlas.reCreate();
                            }

                            scale           = atlas.mAtlasScale;
                            compositeTarget = atlas.mTextures[i].GetSurfaceLevel(k);
                            BRenderDevice.getDevice().SetRenderTarget(0, compositeTarget);
                        }


                        {
                            BTerrainTexturingLayer.eLayerType lastType = BTerrainTexturingLayer.eLayerType.cLayer_Splat;

                            float layerInc = 1.0f / (float)(cMaxNumBlends - 1);// (float)input.getNumLayers();
                            for (int j = 0; j < input.getNumLayers(); j++)
                            {
                                //    BRenderDevice.getDevice().Clear(ClearFlags.ZBuffer | ClearFlags.Target, unchecked((int)0xFFFF0000), 1.0f, 0);

                                //compose a splat
                                shader.SetValue(mShaderContribOverride, 1);
                                shader.SetValue(mShaderAlphaOverride, 1);
                                if (input.giveLayer(j).mLayerType == BTerrainTexturingLayer.eLayerType.cLayer_Splat)
                                {
                                    if (lastType != BTerrainTexturingLayer.eLayerType.cLayer_Splat)
                                    {
                                        shader.EndPass();
                                        shader.BeginPass(0);
                                        lastType = BTerrainTexturingLayer.eLayerType.cLayer_Splat;
                                    }

                                    if (TerrainGlobals.getEditor().getRenderMode() == BTerrainEditor.eEditorRenderMode.cRenderTextureSelectRender)
                                    {
                                        if (TerrainGlobals.getEditor().getMode() != BTerrainEditor.eEditorMode.cModeTexEdit)
                                        {
                                            if (j == 0)
                                            {
                                                shader.SetValue(mShaderContribOverride, 0);
                                                shader.SetValue(mShaderAlphaOverride, 0);
                                            }
                                            else
                                            {
                                                continue;
                                            }
                                        }
                                        else
                                        {
                                            if (input.giveLayer(j).mActiveTextureIndex != TerrainGlobals.getTerrainFrontEnd().SelectedTextureIndex)
                                            {
                                                shader.SetValue(mShaderContribOverride, 0);
                                            }
                                            else
                                            {
                                                shader.SetValue(mShaderContribOverride, 1);
                                            }
                                            shader.SetValue(mShaderAlphaOverride, 0);
                                        }
                                    }


                                    float targetLayer = (float)(j * layerInc);
                                    shader.SetValue(mShaderNumLayersHandle, targetLayer);
                                    shader.SetValue(mShaderAlphaTexArrayHandle, tempAlphaTextures[j]);


                                    //lock in our target texture
                                    BTerrainActiveTextureContainer active = TerrainGlobals.getTexturing().getActiveTexture(input.giveLayer(j).mActiveTextureIndex);
                                    if (active == null)
                                    {
                                        compositeTarget.Dispose();
                                        continue;
                                    }

                                    shader.SetValue(mShaderTexArrayHandle, active.mTexChannels[i].mTexture);
                                    float[] uvs = new float[2];
                                    uvs[0] = active.mUScale;
                                    uvs[1] = active.mVScale;

                                    shader.SetValue(mShaderLayerUV, uvs);
                                }
                                else //compose a decal
                                {
                                    if (lastType != BTerrainTexturingLayer.eLayerType.cLayer_Decal)
                                    {
                                        shader.EndPass();
                                        shader.BeginPass(1);
                                        lastType = BTerrainTexturingLayer.eLayerType.cLayer_Decal;
                                    }

                                    bool doWhite = false;
                                    if (TerrainGlobals.getEditor().getRenderMode() == BTerrainEditor.eEditorRenderMode.cRenderTextureSelectRender)
                                    {
                                        if (TerrainGlobals.getEditor().getMode() == BTerrainEditor.eEditorMode.cModeTexEdit)
                                        {
                                            shader.SetValue(mShaderContribOverride, 0);
                                        }
                                        else if (TerrainGlobals.getEditor().getMode() == BTerrainEditor.eEditorMode.cModeDecalEdit)
                                        {
                                            doWhite = true;
                                            if (TerrainGlobals.getTexturing().getActiveDecalInstance(input.giveLayer(j).mActiveTextureIndex).mActiveDecalIndex != TerrainGlobals.getTerrainFrontEnd().SelectedDecalIndex)
                                            {
                                                shader.SetValue(mShaderContribOverride, 0);
                                            }
                                            else
                                            {
                                                shader.SetValue(mShaderContribOverride, 1);
                                                shader.SetValue(mShaderAlphaOverride, 1);
                                            }
                                        }
                                    }

                                    //Grab our decal instance
                                    BTerrainDecalInstance decal = getActiveDecalInstance(input.giveLayer(j).mActiveTextureIndex);
                                    if (decal == null)
                                    {
                                        compositeTarget.Dispose();
                                        continue;
                                    }
                                    Vector4 selColor = new Vector4(1, 1, 1, 1);
                                    if (decal.mIsSelected)
                                    {
                                        selColor.Y = 0.75f;
                                        selColor.Z = 0.75f;
                                    }
                                    shader.SetValue(mShaderColorOverload, selColor);



                                    //grab the decal we care about
                                    BTerrainActiveDecalContainer active = getActiveDecal(decal.mActiveDecalIndex);
                                    if (active == null)
                                    {
                                        compositeTarget.Dispose();
                                        continue;
                                    }
                                    if (doWhite)
                                    {
                                        shader.SetValue(mShaderAlphaTexArrayHandle, tempAlphaTextures[0]);
                                    }
                                    else
                                    {
                                        shader.SetValue(mShaderAlphaTexArrayHandle, tempAlphaTextures[j]);
                                    }
                                    shader.SetValue(mShaderAlphaTexDecalHandle, active.mTexChannels[(int)BTerrainTexturing.eTextureChannels.cOpacity].mTexture);
                                    shader.SetValue(mShaderTexDecalHandle, active.mTexChannels[i].mTexture);

                                    float[] decalDat = new float[4];
                                    decalDat[0] = decal.mRotation;


                                    //compute our U and V offset
                                    float vertsToHighResPixelSpaceRatio = BTerrainTexturing.getTextureWidth() / BTerrainQuadNode.cMaxWidth;
                                    decalDat[1] = (decal.mTileCenter.X - (minXVert * vertsToHighResPixelSpaceRatio)) / BTerrainTexturing.getTextureWidth();
                                    decalDat[2] = (decal.mTileCenter.Y - (minZVert * vertsToHighResPixelSpaceRatio)) / BTerrainTexturing.getTextureHeight();

                                    decalDat[3] = 0;

                                    shader.SetValue(mShaderLayerDecalData, decalDat);

                                    float[] uvs = new float[2];
                                    uvs[0] = decal.mUScale;
                                    uvs[1] = decal.mVScale;
                                    shader.SetValue(mShaderLayerUV, uvs);
                                }

                                shader.CommitChanges();
                                BRenderDevice.getDevice().Viewport = vp;
                                BRenderDevice.getDevice().DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 4, 0, 2);
                            }

                            shader.EndPass();
                            shader.BeginPass(0);
                        }
                    }
                    catch (Direct3DXException e)
                    {
                        CoreGlobals.getErrorManager().SendToErrorWarningViewer("An error has occured during the compositing process");
                    }
                    finally
                    {
                        if (compositeTarget != null)
                        {
                            compositeTarget.Dispose();
                        }
                    }
                }
            }
            shader.EndPass();
            shader.End();
        }
Exemplo n.º 4
0
        public void DrawWall()
        {
            // Disable alpha blend setting
            GameDevice.RenderState.AlphaBlendEnable = false;

            // Apply shaders to wall
            int numPasses = WallEffect.Begin(0);

            for (int iPass = 0; iPass < numPasses; iPass++)
            {
                WallEffect.BeginPass(iPass);
                for (int i = 0; i < WallMaterials.Length; i++)
                {
                    // Set texture tiling properties for parts of the wall.
                    if (i == 6)                    // Drain Texture
                    {
                        WallEffect.SetValue("xMultiply", 20.0f);
                        WallEffect.SetValue("yMultiply", 1.0f);
                    }
                    else if (i == 4)                    // Wall Texture
                    {
                        WallEffect.SetValue("xMultiply", 5.0f);
                        WallEffect.SetValue("yMultiply", 5.0f);
                    }
                    else if (i == 7)                    // Catwalk Texture
                    {
                        WallEffect.SetValue("xMultiply", 3.0f);
                        WallEffect.SetValue("yMultiply", 3.0f);
                    }
                    else
                    {
                        WallEffect.SetValue("xMultiply", 3.0f);
                        WallEffect.SetValue("yMultiply", 3.0f);
                    }
                    WallEffect.CommitChanges();
                    GameDevice.SetTexture(0, WallTextures[i]);
                    WallMesh.DrawSubset(i);
                }
                WallEffect.EndPass();
            }
            WallEffect.End();

            numPasses = PipeEffect.Begin(0);
            for (int iPass = 0; iPass < numPasses; iPass++)
            {
                PipeEffect.BeginPass(iPass);
                // Set texture tiling properties for parts of the pipe.
                for (int i = 0; i < PipeMaterials.Length; i++)
                {
                    if (i == 6)                    // Bars Texture
                    {
                        PipeEffect.SetValue("xMultiply", 1.0f);
                        PipeEffect.SetValue("yMultiply", 1.0f);
                    }
                    else if (i == 5)                    // Outside pipe
                    {
                        PipeEffect.SetValue("xMultiply", 1.0f);
                        PipeEffect.SetValue("yMultiply", 2.0f);
                    }
                    else if (i == 3)                    // Inside pipe
                    {
                        PipeEffect.SetValue("xMultiply", 3.0f);
                        PipeEffect.SetValue("yMultiply", 3.0f);
                    }
                    else
                    {
                        PipeEffect.SetValue("xMultiply", 1.0f);
                        PipeEffect.SetValue("yMultiply", 1.0f);
                    }
                    PipeEffect.CommitChanges();
                    GameDevice.SetTexture(0, PipeTextures[i]);
                    PipeMesh.DrawSubset(i);
                }
                PipeEffect.EndPass();
            }
            PipeEffect.End();

            // Restore alpha blend setting
            GameDevice.RenderState.AlphaBlendEnable = true;
        }