示例#1
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");
        }
示例#2
0
        /// <summary>
        /// Checks if the specified technique in the effect is valid.
        /// </summary>
        /// <param name="name">The name of the technique to validate.</param>
        /// <returns>Whether the technique is valid.</returns>
        public bool ValidateTechnique(string name)
        {
            bool result = false;

            D3D.EffectHandle technique = _effect.GetTechnique(name);

            if (technique != null)
            {
                result = _effect.IsTechniqueValid(technique);
            }

            return(result);
        }
示例#3
0
        public void init(String filename)
        {
            mShader = ShaderManager.loadShader(filename, null);


            s_Quad = new D3DQuad(false);



            // call FxShader constructor

            mShader = ShaderManager.loadShader(filename, null);

            // init default parameters

            m_fxViewport          = mShader.GetParameter(null, "Viewport");
            m_fxDestRegionCoord   = mShader.GetParameter(null, "DestRegionCoord");
            m_fxDestRegionSize    = mShader.GetParameter(null, "DestRegionSize");
            m_fxInvDestRegionSize = mShader.GetParameter(null, "InvDestRegionSize");
            m_fxTechMain          = mShader.GetTechnique("t_main");

            mShader.Technique = m_fxTechMain;
        }
示例#4
0
        /// <summary>
        /// Renders the highlighted terrain vertices.
        /// </summary>
        public void RenderVertices()
        {
            if (_buffers.VertexBuffer_Vertices != null && _page.TerrainPatch.NumVertices < 75 * 75)
            {
                if (_page.TerrainPatch.RefreshVertices || _buffers.VertexBuffer_Vertices == null)
                {
                    RefreshVertexBuffer_Vertices();
                    _page.TerrainPatch.RefreshVertices = false;
                }

                Matrix world = _viewport.Camera.WorldIdentity;
                world.Translate(_viewport.Camera.Offset + new Vector3(0f, 0.0001f, 0f));
                _viewport.Device.RenderState.FillMode = D3D.FillMode.Solid;
                _viewport.Device.SetStreamSource(0, _buffers.VertexBuffer_Vertices, 0);

                if (_vertexShaderVersion >= new Version(1, 1) &&
                    _viewport.Effects.Count > 1 && _viewport.Effects[1] != null)
                {
                    D3D.Effect effect = ((Effect)_viewport.Effects[1]).DXEffect;
                    int        passes;

                    // Set Effect technique
                    effect.Technique = effect.GetTechnique("TVertices");

                    // Set camera matrices
                    effect.SetValue("World", world);
                    effect.SetValue("View", _viewport.Camera.View);
                    effect.SetValue("Projection", _viewport.Camera.Projection);

                    // Begin the effect rendering
                    passes = effect.Begin(D3D.FX.None);

                    // Render each pass
                    for (int i = 0; i < passes; i++)
                    {
                        effect.BeginPass(i);

                        // Render vertices with or without index buffer
                        if (_buffers.IndexBuffer_Vertices != null)
                        {
                            _viewport.Device.Indices = _buffers.IndexBuffer_Vertices;
                            _viewport.Device.DrawIndexedPrimitives(D3D.PrimitiveType.TriangleList, 0, 0,
                                                                   _buffers.VertexBufferSize_Vertices, 0, _buffers.IndexBufferSize_Vertices / 3);
                        }
                        else
                        {
                            _viewport.Device.DrawPrimitives(D3D.PrimitiveType.TriangleList, 0,
                                                            _buffers.VertexBufferSize_Vertices);
                        }

                        effect.EndPass();
                    }

                    // End the effect rendering
                    effect.End();
                }
                else
                {
                    // Keeping Z-Buffer enabled will hide vertices obscured by terrain
                    //_viewport.Device.RenderState.ZBufferEnable = false;
                    _viewport.Device.Transform.World = world;

                    if (_viewport.Device.RenderState.Lighting)
                    {
                        _viewport.Device.RenderState.Lighting = false;
                    }

                    if (_buffers.IndexBuffer_Vertices != null)
                    {
                        _viewport.Device.Indices = _buffers.IndexBuffer_Vertices;
                        _viewport.Device.DrawIndexedPrimitives(D3D.PrimitiveType.TriangleList, 0, 0,
                                                               _buffers.VertexBufferSize_Vertices, 0, _buffers.IndexBufferSize_Vertices / 3);
                    }
                    else
                    {
                        _viewport.Device.DrawPrimitives(D3D.PrimitiveType.TriangleList, 0,
                                                        _buffers.VertexBufferSize_Vertices / 3);
                    }

                    //_viewport.Device.RenderState.ZBufferEnable = true;
                }
            }
        }
示例#5
0
        /// <summary>
        /// Inizializza l'effetto avanzato Water (da utilizzare all'esterno del GameLoop)
        /// </summary>
        /// <param name="baseTex"></param>
        /// <param name="backTex"></param>
        /// <param name="normal1Tex"></param>
        /// <param name="worldTex"></param>
        /// <param name="terraIncognitaTex"></param>
        /// <param name="normal2Tex"></param>
        /// <param name="normal3Tex"></param>
        public void WaterEffect(string baseTex, string backTex, string normal1Tex, string worldTex, string terraIncognitaTex, string normal2Tex, string normal3Tex)
        {
            try
            {
                EffectPool pool = new EffectPool();
                Effect = Microsoft.DirectX.Direct3D.Effect.FromFile(LogiX_Engine.Device, "Water.fx", null, ShaderFlags.None, pool);
                EffectHandles = new EffectHandle[16];
                EffectTechniques = new EffectHandle[1];
                EffectTechniques[0] = Effect.GetTechnique("Water");
                EffectHandles[0] = Effect.GetParameter(null, "matWorldViewProjection");
                EffectHandles[1] = Effect.GetParameter(null, "LightPosition");
                EffectHandles[2] = Effect.GetParameter(null, "CameraPosition");
                EffectHandles[3] = Effect.GetParameter(null, "Time");
                EffectHandles[4] = Effect.GetParameter(null, "vAlpha");
                EffectHandles[5] = Effect.GetParameter(null, "Wave");
                EffectHandles[6] = Effect.GetParameter(null, "waveSpeed");
                EffectHandles[7] = Effect.GetParameter(null, "WaveLenght");
                EffectHandles[8] = Effect.GetParameter(null, "TexturesDimension");
                EffectHandles[9] = Effect.GetParameter(null, "BaseTex");
                EffectHandles[10] = Effect.GetParameter(null, "BackTex");
                EffectHandles[11] = Effect.GetParameter(null, "Normal1Tex");
                EffectHandles[12] = Effect.GetParameter(null, "WorldTex");
                EffectHandles[13] = Effect.GetParameter(null, "TerraIncognitaTex");
                EffectHandles[14] = Effect.GetParameter(null, "Normal2Tex");
                EffectHandles[15] = Effect.GetParameter(null, "Normal3Tex");

                BaseTextures = new BaseTexture[7];
                BaseTextures[0] = TextureLoader.FromFile(LogiX_Engine.Device, baseTex);
                BaseTextures[1] = TextureLoader.FromFile(LogiX_Engine.Device, backTex);
                BaseTextures[2] = TextureLoader.FromFile(LogiX_Engine.Device, normal1Tex);
                BaseTextures[3] = TextureLoader.FromFile(LogiX_Engine.Device, worldTex);
                BaseTextures[4] = TextureLoader.FromFile(LogiX_Engine.Device, terraIncognitaTex);
                BaseTextures[5] = TextureLoader.FromFile(LogiX_Engine.Device, normal2Tex);
                BaseTextures[6] = TextureLoader.FromFile(LogiX_Engine.Device, normal3Tex);

                correct = true;
            }
            catch
            {
                Error("OnCreateObject");
            }
        }
示例#6
0
        /// <summary>
        /// Inizializza l'effetto avanzato Glass (da utilizzare all'esterno del GameLoop)
        /// </summary>
        /// <param name="cubeMap"></param>
        public void GlassEffect(CubeMap cubeMap)
        {
            try
            {
                EffectPool pool = new EffectPool();
                Effect = Microsoft.DirectX.Direct3D.Effect.FromFile(LogiX_Engine.Device, "MEDIA//Glass.fx", null, ShaderFlags.None, pool);
                EffectHandles = new EffectHandle[10];
                EffectTechniques = new EffectHandle[1];
                EffectTechniques[0] = Effect.GetTechnique("Glass");
                EffectHandles[0] = Effect.GetParameter(null, "matViewProjection");
                EffectHandles[1] = Effect.GetParameter(null, "PointOfView");
                EffectHandles[2] = Effect.GetParameter(null, "refractionScale");
                EffectHandles[3] = Effect.GetParameter(null, "baseColor");
                EffectHandles[4] = Effect.GetParameter(null, "ambient");
                EffectHandles[5] = Effect.GetParameter(null, "indexOfRefractionRatio");
                EffectHandles[6] = Effect.GetParameter(null, "reflectionScale");
                EffectHandles[7] = Effect.GetParameter(null, "texCube");
                EffectHandles[8] = Effect.GetParameter(null, "alpha");
                EffectHandles[9] = Effect.GetParameter(null, "matWorld");

                CubeTextures = new CubeTexture[1];
                CubeTextures[0] = cubeMap.DXCubeTexture;

                correct = true;
            }
            catch
            {
                Error("OnCreateObject");
            }
        }
示例#7
0
 /// <summary>
 /// Inizializza un effetto base tra quelli possibili (definiti da LogiX_Technologies.XEffects). Da utilizzare all'esterno del GameLoop
 /// </summary>
 /// <param name="baseTexturePath"></param>
 /// <param name="normalTexturePath"></param>
 /// <param name="cubeMap"></param>
 /// <param name="DefaultEffects"></param>
 public void DefaultEffect(string baseTexturePath, string normalTexturePath, CubeMap cubeMap, XEffects DefaultEffects)
 {
     switch (DefaultEffects)
     {
         case XEffects.PerPixelDirectionalLight:
             try
             {
                 EffectPool pool = new EffectPool();
                 Effect = Microsoft.DirectX.Direct3D.Effect.FromFile(LogiX_Engine.Device, "PerPixelDirectionalLight.fx", null, ShaderFlags.None, pool);
                 EffectHandles = new EffectHandle[8];
                 EffectTechniques = new EffectHandle[1];
                 EffectTechniques[0] = Effect.GetTechnique("t0");
                 EffectHandles[0] = Effect.GetParameter(null, "transform");
                 EffectHandles[1] = Effect.GetParameter(null, "world");
                 EffectHandles[2] = Effect.GetParameter(null, "LightDirection");
                 EffectHandles[3] = Effect.GetParameter(null, "ViewDirection");
                 EffectHandles[4] = Effect.GetParameter(null, "base_Tex");
                 EffectHandles[5] = Effect.GetParameter(null, "Specular");
                 EffectHandles[6] = Effect.GetParameter(null, "Diffuse");
                 EffectHandles[7] = Effect.GetParameter(null, "SpecularPower");
                 BaseTextures = new BaseTexture[1];
                 BaseTextures[0] = TextureLoader.FromFile(LogiX_Engine.Device, baseTexturePath);
                 correct = true;
             }
             catch
             {
                 Error("OnCreateObject");
             }
             break;
         case XEffects.PerPixelPointLight:
             try
             {
                 EffectPool pool = new EffectPool();
                 Effect = Microsoft.DirectX.Direct3D.Effect.FromFile(LogiX_Engine.Device, Application.StartupPath + "/PerPixelPointLight.fx", null, ShaderFlags.None, pool);
                 EffectHandles = new EffectHandle[11];
                 EffectTechniques = new EffectHandle[1];
                 EffectTechniques[0] = Effect.GetTechnique("PerPixelLightning");
                 EffectHandles[0] = Effect.GetParameter(null, "World");
                 EffectHandles[1] = Effect.GetParameter(null, "View");
                 EffectHandles[2] = Effect.GetParameter(null, "Projection");
                 EffectHandles[3] = Effect.GetParameter(null, "LightPosition");
                 EffectHandles[4] = Effect.GetParameter(null, "ReflectionRatio");
                 EffectHandles[5] = Effect.GetParameter(null, "SpecularRatio");
                 EffectHandles[6] = Effect.GetParameter(null, "SpecularStyleLerp");
                 EffectHandles[7] = Effect.GetParameter(null, "SpecularPower");
                 EffectHandles[8] = Effect.GetParameter(null, "LightColor");
                 EffectHandles[9] = Effect.GetParameter(null, "MyTex_Tex");
                 EffectHandles[10] = Effect.GetParameter(null, "myCubemap_Tex");
                 BaseTextures = new BaseTexture[1];
                 CubeTextures = new CubeTexture[1];
                 BaseTextures[0] = TextureLoader.FromFile(LogiX_Engine.Device, baseTexturePath);
                 CubeTextures[0] = cubeMap.DXCubeTexture;
             }
             catch
             {
                 Error("OnCreateObject");
             }
             break;
         case XEffects.BumpPerPixelPointLight:
             try
             {
                 EffectPool pool = new EffectPool();
                 Effect = Microsoft.DirectX.Direct3D.Effect.FromFile(LogiX_Engine.Device, Application.StartupPath + "PerPixelPointLight.fx", null, ShaderFlags.None, pool);
                 EffectHandles = new EffectHandle[12];
                 EffectTechniques = new EffectHandle[1];
                 EffectTechniques[0] = Effect.GetTechnique("PerPixelLightning");
                 EffectHandles[0] = Effect.GetParameter(null, "World");
                 EffectHandles[1] = Effect.GetParameter(null, "View");
                 EffectHandles[2] = Effect.GetParameter(null, "Projection");
                 EffectHandles[3] = Effect.GetParameter(null, "LightPosition");
                 EffectHandles[4] = Effect.GetParameter(null, "ReflectionRatio");
                 EffectHandles[5] = Effect.GetParameter(null, "SpecularRatio");
                 EffectHandles[6] = Effect.GetParameter(null, "SpecularStyleLerp");
                 EffectHandles[7] = Effect.GetParameter(null, "SpecularPower");
                 EffectHandles[8] = Effect.GetParameter(null, "LightColor");
                 EffectHandles[9] = Effect.GetParameter(null, "MyTex_Tex");
                 EffectHandles[10] = Effect.GetParameter(null, "MyNTex_Tex");
                 EffectHandles[11] = Effect.GetParameter(null, "myCubemap_Tex");
                 BaseTextures = new BaseTexture[2];
                 CubeTextures = new CubeTexture[1];
                 BaseTextures[0] = TextureLoader.FromFile(LogiX_Engine.Device, baseTexturePath);
                 BaseTextures[1] = TextureLoader.FromFile(LogiX_Engine.Device, normalTexturePath);
                 CubeTextures[0] = cubeMap.DXCubeTexture;
                 correct = true;
             }
             catch
             {
                 Error("OnCreateObject");
             }
             break;
         case XEffects.Reflect:
             try
             {
                 EffectPool pool = new EffectPool();
                 Effect = Microsoft.DirectX.Direct3D.Effect.FromFile(LogiX_Engine.Device, "Reflect.fx", null, ShaderFlags.None, pool);
                 EffectHandles = new EffectHandle[7];
                 EffectTechniques = new EffectHandle[1];
                 EffectTechniques[0] = Effect.GetTechnique("Textured_Bump");
                 EffectHandles[0] = Effect.GetParameter(null, "fvEyePosition");
                 EffectHandles[1] = Effect.GetParameter(null, "matView");
                 EffectHandles[2] = Effect.GetParameter(null, "matViewProjection");
                 EffectHandles[3] = Effect.GetParameter(null, "ReflectionRatio");
                 EffectHandles[4] = Effect.GetParameter(null, "bump_Tex");
                 EffectHandles[5] = Effect.GetParameter(null, "cube_Tex");
                 EffectHandles[6] = Effect.GetParameter(null, "Bump");
                 BaseTextures = new BaseTexture[1];
                 CubeTextures = new CubeTexture[1];
                 BaseTextures[0] = TextureLoader.FromFile(LogiX_Engine.Device, normalTexturePath);
                 CubeTextures[0] = cubeMap.DXCubeTexture;
                 correct = true;
             }
             catch
             {
                 Error("OnCreateObject");
             }
             break;
     }
 }