Пример #1
0
        public void Dispose()
        {
            GC.SuppressFinalize(this);

            if (frontBuffer != null)
            {
                frontBuffer.Dispose();
                frontBuffer = null;
            }
            if (FrameBuffer != null)
            {
                FrameBuffer.Dispose();
                FrameBuffer = null;
            }
            if (Rasterizer != null)
            {
                Rasterizer.Dispose();
                Rasterizer = null;
            }
            if (ShaderData != null)
            {
                ShaderData.Dispose();
                ShaderData = null;
            }
            if (ShaderMgr != null)
            {
                ShaderMgr.Dispose();
                ShaderMgr = null;
            }

            Shader         = null;
            UsingSubShader = null;
            UsingPass      = null;
        }
Пример #2
0
    public void SetElevation(
        int elevation,
        float hexOuterRadius,
        int wrapSize
        )
    {
        if (this.elevation == elevation)
        {
            return;
        }

        int originalViewElevation = ViewElevation;

        this.elevation = elevation;

        if (ViewElevation != originalViewElevation)
        {
            ShaderData.ViewElevationChanged();
        }

        RefreshPosition(
            hexOuterRadius,
            wrapSize
            );
    }
Пример #3
0
 public TexturedGraphicModule(string programID)
 {
     _programID = programID;
     Program    = MainGraphic.GetProgramById(_programID);
     Program.DisposeChildren = true;
     Data = new ShaderData();
 }
Пример #4
0
    /// <summary>
    /// Reads from the binary file to assign cell data to this current cell.
    /// </summary>
    /// <param name="reader"> Binary reader used to read the binary file</param>
    public void Load(BinaryReader reader, int header)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);
        elevation = reader.ReadByte();
        if (header >= 4)
        {
            elevation -= 127;
        }
        RefreshPosition();
        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        walled       = reader.ReadBoolean();

        hasIncomingRiver = reader.ReadBoolean();
        incomingRiver    = (HexDirection)reader.ReadByte();

        hasOutgoingRiver = reader.ReadBoolean();
        outgoingRiver    = (HexDirection)reader.ReadByte();

        for (int i = 0; i < roads.Length; i++)
        {
            roads[i] = reader.ReadBoolean();
        }
        IsExplored = header >= 3 ? reader.ReadBoolean() : false;
        ShaderData.RefreshVisibility(this);
    }
Пример #5
0
        public static ShaderBytecode CompressShaders(params ShaderBytecode[] shaderBytecodes)
        {
            Blob blob       = null;
            var  shaderData = new ShaderData[shaderBytecodes.Length];
            var  handles    = new GCHandle[shaderBytecodes.Length];

            try
            {
                for (int i = 0; i < shaderBytecodes.Length; i++)
                {
                    handles[i] = GCHandle.Alloc(shaderBytecodes[i].Data, GCHandleType.Pinned);

                    shaderData[i] = new ShaderData
                    {
                        BytecodePtr    = handles[i].AddrOfPinnedObject(),
                        BytecodeLength = shaderBytecodes[i].Data.Length
                    };
                }
                CompressShaders(shaderBytecodes.Length, shaderData, 1, out blob);
            }
            finally
            {
                foreach (var handle in handles)
                {
                    handle.Free();
                }
            }

            if (blob == null)
            {
                return(default);
Пример #6
0
        public AL_NormalsVisualize()
        {
            Name = "AL_NormalsVisualize";

            ShaderData AL_NormalsVisualizeShader = new ShaderData("AL_NormalsVisualizeShader")
            {
                DXVertexShaderFile = "data/shaders/common/postFx/postFxV.hlsl",
                DXPixelShaderFile  = "data/shaders/common/lighting/advanced/dbgNormalVisualizeP.hlsl",

                OGLVertexShaderFile = "data/shaders/common/postFx/postFxV.glsl",
                OGLPixelShaderFile  = "data/shaders/common/lighting/advanced/gl/dbgNormalVisualizeP.glsl",

                SamplerNames =
                {
                    [0] = "prepassTex"
                },

                PixVersion = 2.0f
            };

            AL_NormalsVisualizeShader.registerSingleton();

            Shader     = "AL_NormalsVisualizeShader";
            StateBlock = LightViz.AL_DefaultVisualizeState;

            Texture[0] = "#prepass";

            Target         = "$backBuffer";
            RenderPriority = 9999;
        }
Пример #7
0
        //获取shader的 keywords
        public static ShaderData GetShaderKeywords(Shader shader)
        {
            ShaderData sd = new ShaderData();

            GetShaderVariantEntriesFiltered(shader, new string[] { }, out sd.PassTypes, out sd.KeyWords, out sd.ReMainingKeyWords);
            return(sd);
        }
Пример #8
0
        private void ParseFile()
        {
            try
            {
                JsonBaseImportData data = JsonConvert.DeserializeObject <JsonBaseImportData>(File.ReadAllText(PathFile));
                if (data != null)
                {
                    Console.WriteLine("[INFO] GeneratorType: " + data.GeneratorType);
                    switch (data.GeneratorType)
                    {
                    case GeneratorType.Terrain:
                        string           directoryName    = System.IO.Path.GetDirectoryName(PathFile);
                        WorldTerrainData worldTerrainData = data as WorldTerrainData;
                        worldTerrainData.DirectoryPath = directoryName;
                        mGenerator = new TerrainGenerator(worldTerrainData);
                        break;

                    case GeneratorType.Heightmap:
                        HeightmapData heightmapData = data as HeightmapData;
                        mGenerator = new HeightmapGenerator(heightmapData, mSchematic);
                        break;

                    case GeneratorType.Shader:
                        ShaderData shaderData = data as ShaderData;
                        mGenerator = new ShaderGenerator(shaderData, mSchematic);
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("[ERROR] Failed to parse the JSON file: " + e.Message);
            }
        }
Пример #9
0
    public void Load(BinaryReader reader)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);
        elevation = reader.ReadByte();
        RefreshPosition();
        waterLevel = reader.ReadByte();
        urbanLevel = reader.ReadByte();
        farmLevel  = reader.ReadByte();
        plantLevel = reader.ReadByte();

        byte riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasIncomingRiver = false;
        }

        riverData = reader.ReadByte();
        if (riverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }
    }
Пример #10
0
        //Match what Wes's compiler does
        public static void FixUVScales(this GenericRCOLResource rcolResource, MLOD.Mesh mesh)
        {
            MATD matd = GetMATDforMesh(rcolResource, mesh.MaterialIndex);

            if (matd == null)
            {
                throw new ArgumentException("No MATD found for requested mesh");
            }

            foreach (FieldType ft in new FieldType[] { FieldType.UVScales, FieldType.DiffuseUVSelector, FieldType.SpecularUVSelector, })
            {
                ShaderData data = (matd.Version < 0x0103 ? matd.Mtrl.SData : matd.Mtnf.SData).Find(x => x.Field == ft);
                if (data == null)
                {
                    continue;
                }

                if (!(data is ElementFloat3))
                {
                    throw new InvalidOperationException(String.Format("Found " + ft + " of type '{0}'; expected 'ElementFloat3'.", data.GetType().Name));
                }

                ElementFloat3 e = data as ElementFloat3;
                e.Data0 = 1f / short.MaxValue;
                e.Data1 = 0f;
                e.Data2 = 0f;
            }
        }
Пример #11
0
        private void LoadXML(XElement materialEditorElement)
        {
            if (materialEditorElement == null)
            {
                return;
            }

            foreach (var shaderElement in materialEditorElement.Elements("Shader"))
            {
                string shaderName = shaderElement.Attribute("Name").Value;

                LoadedShaders[shaderName] = new ShaderData(shaderName, shaderElement.Attribute("AssetBundle")?.Value, shaderElement.Attribute("RenderQueue")?.Value, shaderElement.Attribute("Asset")?.Value);

                XMLShaderProperties[shaderName] = new Dictionary <string, ShaderPropertyData>();

                foreach (XElement element in shaderElement.Elements("Property"))
                {
                    string             propertyName       = element.Attribute("Name").Value;
                    ShaderPropertyType propertyType       = (ShaderPropertyType)Enum.Parse(typeof(ShaderPropertyType), element.Attribute("Type").Value);
                    string             defaultValue       = element.Attribute("DefaultValue")?.Value;
                    string             defaultValueAB     = element.Attribute("DefaultValueAssetBundle")?.Value;
                    ShaderPropertyData shaderPropertyData = new ShaderPropertyData(propertyName, propertyType, defaultValue, defaultValueAB);

                    XMLShaderProperties["default"][propertyName]  = shaderPropertyData;
                    XMLShaderProperties[shaderName][propertyName] = shaderPropertyData;
                }
            }
        }
Пример #12
0
        public static void Init()
        {
            ShaderData ShadowFilterShaderV = new ShaderData("BL_ShadowFilterShaderV")
            {
                DXVertexShaderFile  = "data/shaders/common/lighting/basic/shadowFilterV.hlsl",
                DXPixelShaderFile   = "data/shaders/common/lighting/basic/shadowFilterP.hlsl",
                OGLVertexShaderFile = "data/shaders/common/lighting/basic/gl/shadowFilterV.glsl",
                OGLPixelShaderFile  = "data/shaders/common/lighting/basic/gl/shadowFilterP.glsl",
                SamplerNames        = { [0] = "$diffuseMap" },
                Defines             = "BLUR_DIR=float2(1.0,0.0)",
                PixVersion          = 2.0f
            };

            ShadowFilterShaderV.registerSingleton();

            new ShaderData("BL_ShadowFilterShaderH", ShadowFilterShaderV)
            {
                Defines = "BLUR_DIR=float2(0.0,1.0)"
            }.registerSingleton();


            GFXStateBlockData BL_ShadowFilterSB = new GFXStateBlockData("BL_ShadowFilterSB", Core.PostEffect.PFX_DefaultStateBlock)
            {
                ColorWriteDefined = true,
                ColorWriteRed     = false,
                ColorWriteGreen   = false,
                ColorWriteBlue    = false,
                BlendDefined      = true,
                BlendEnable       = true
            };

            BL_ShadowFilterSB.registerSingleton();

            // NOTE: This is ONLY used in Basic Lighting, and
            // only directly by the ProjectedShadow.  It is not
            // meant to be manually enabled like other PostEffects.
            Torque3D.PostEffect BL_ShadowFilterPostFx = new Torque3D.PostEffect("BL_ShadowFilterPostFx")
            {
                // Blur vertically
                Shader           = "BL_ShadowFilterShaderV",
                StateBlock       = PostEffect.PFX_DefaultStateBlock,
                TargetClear      = PFXTargetClear.PFXTargetClear_OnDraw,
                TargetClearColor = new ColorF(0.0f, 0.0f, 0.0f, 0.0f),
                Texture          = { [0] = "$inTex" },
                Target           = "$outTex"
            };

            Torque3D.PostEffect blurEffect = new Torque3D.PostEffect
            {
                Shader     = "BL_ShadowFilterShaderH",
                StateBlock = PostEffect.PFX_DefaultStateBlock,
                Texture    = { [0] = "$inTex" },
                Target     = "$outTex"
            };
            blurEffect.registerObject();
            BL_ShadowFilterPostFx.add(blurEffect);

            BL_ShadowFilterPostFx.registerObject();
        }
Пример #13
0
 public void DecreaseVisibility()
 {
     visibility -= 1;
     if (visibility == 0)
     {
         ShaderData.RefreshVisibility(this);
     }
 }
Пример #14
0
 public void ResetVisibility()
 {
     if (visibility > 0)
     {
         visibility = 0;
         ShaderData.RefreshVisibility(this);
     }
 }
Пример #15
0
 public void ResetExploration()
 {
     if (IsExplored)
     {
         IsExplored = false;
         ShaderData.RefreshVisibility(this);
     }
 }
Пример #16
0
 public void IncreaseVisibility()
 {
     visibility += 1;
     if (visibility == 1)
     {
         ShaderData.RefreshVisibility(this);
     }
 }
Пример #17
0
 public GraphicModule(string programID, int shaderSize, Color shaderColor)
 {
     _programID              = programID;
     _shaderSize             = shaderSize;
     _shaderColor            = shaderColor;
     Program                 = MainGraphic.GetProgramById(_programID);
     Program.DisposeChildren = true;
     Data = new ShaderData(shaderColor);
 }
 public void IncreaseVisibility()
 {
     visibility += 1;
     if (visibility == 1)
     {
         IsExplored = true;             // When viewed for the first time gets explored, just always set faster than check to set
         ShaderData.RefreshVisibility(this);
     }
 }
Пример #19
0
 public void IncreaseVisibility()
 {
     visibility += 1;
     if (visibility == 1)
     {
         IsExplored = true;
         ShaderData.RefreshVisibility(this);
     }
 }
Пример #20
0
    void SetShaderData(Dictionary <Vector2, float[, ]> humidityMapDictionary, List <Vector2> coordList)
    {
        float[,] sharedHumidityMap = CombineNoiseMaps(humidityMapDictionary, coordList);
        Texture2D  hmTexture = noiseDisplay.GenerateNoiseMapTexture(sharedHumidityMap);
        ShaderData sd        = new ShaderData(noiseDisplay.customMaterial, mapSizeX, mapSizeY, chunkSize, chunkSize, hmTexture, noiseDisplay.regionMap);

        sd.SetMaxMinHeights(heightNoiseData.noiseIndex, GetHeightAt(1), GetHeightAt(0));
        noiseDisplay.regionMap.SetShaderData(sd);
    }
Пример #21
0
 public void DecreaseVisibility()
 {
     visibility -= 1;
     if (visibility <= 0)
     {
         ShaderData.RefreshVisibility(this);
         visibility = 0;     // Should never have have fewer than 0 units providing visibility
     }
 }
Пример #22
0
        private static void LoadXML(XmlElement materialEditorElement)
        {
            if (materialEditorElement == null)
            {
                return;
            }
            var shaderElements = materialEditorElement.GetElementsByTagName("Shader");

            foreach (var shaderElementObj in shaderElements)
            {
                if (shaderElementObj != null)
                {
                    var    shaderElement = (XmlElement)shaderElementObj;
                    string shaderName    = shaderElement.GetAttribute("Name");

                    if (LoadedShaders.ContainsKey(shaderName))
                    {
                        Destroy(LoadedShaders[shaderName].Shader);
                        LoadedShaders.Remove(shaderName);
                    }
                    var shader = LoadShader(shaderName, shaderElement.GetAttribute("AssetBundle"), shaderElement.GetAttribute("Asset"));
                    LoadedShaders[shaderName] = new ShaderData(shader, shaderName, shaderElement.GetAttribute("RenderQueue"), shaderElement.GetAttribute("ShaderOptimization"));

                    XMLShaderProperties[shaderName] = new Dictionary <string, ShaderPropertyData>();
                    var shaderPropertyElements = shaderElement.GetElementsByTagName("Property");
                    foreach (var shaderPropertyElementObj in shaderPropertyElements)
                    {
                        if (shaderPropertyElementObj != null)
                        {
                            var shaderPropertyElement = (XmlElement)shaderPropertyElementObj;

                            string             propertyName   = shaderPropertyElement.GetAttribute("Name");
                            ShaderPropertyType propertyType   = (ShaderPropertyType)Enum.Parse(typeof(ShaderPropertyType), shaderPropertyElement.GetAttribute("Type"));
                            string             defaultValue   = shaderPropertyElement.GetAttribute("DefaultValue");
                            string             defaultValueAB = shaderPropertyElement.GetAttribute("DefaultValueAssetBundle");
                            string             range          = shaderPropertyElement.GetAttribute("Range");
                            string             min            = null;
                            string             max            = null;
                            if (!range.IsNullOrWhiteSpace())
                            {
                                var rangeSplit = range.Split(',');
                                if (rangeSplit.Length == 2)
                                {
                                    min = rangeSplit[0];
                                    max = rangeSplit[1];
                                }
                            }
                            ShaderPropertyData shaderPropertyData = new ShaderPropertyData(propertyName, propertyType, defaultValue, defaultValueAB, min, max);

                            XMLShaderProperties["default"][propertyName]  = shaderPropertyData;
                            XMLShaderProperties[shaderName][propertyName] = shaderPropertyData;
                        }
                    }
                }
            }
        }
Пример #23
0
 public static Frame Clone(Frame original, ShaderData shaderData)
 {
     if (original == null || original == Frame.m_Empty)
     {
         return(original);
     }
     return(new Frame()
     {
         Image = Texture.Clone(original.Image, shaderData), CenterX = original.CenterX, CenterY = original.CenterY
     });
 }
Пример #24
0
        public void Begin(Matrix transform, Plane plane, float shadowIndensity)
        {
            pass.Apply();

            var data = new ShaderData();
            data.ShadowWorldTransform = transform * Matrix.Shadow(Light.MainLight.LightDir4, plane);
            data.ShadowIndensity = shadowIndensity;
            data.___ = Vector3.Zero;
            game.DeviceContext.UpdateSubresource(ref data, buffer);
            game.DeviceContext.VertexShader.SetConstantBuffer(0, buffer);
            game.DeviceContext.PixelShader.SetConstantBuffer(0, buffer);
        }
Пример #25
0
    public void Load(BinaryReader reader, int header)
    {
        // 按照保存顺序读取整形数据
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);

        elevation    = reader.ReadByte() - 127;
        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        RefreshPosition();                                      // 刷新六边形gameobject高度

        walled = reader.ReadBoolean();

        // 读取流入河流数据
        byte incomingRiverData = reader.ReadByte();

        if (incomingRiverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(incomingRiverData - 128);
        }
        else
        {
            hasIncomingRiver = false;
        }
        // 读取流出河流数据
        byte ougoingRiverData = reader.ReadByte();

        if (ougoingRiverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(ougoingRiverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }

        // 道路数据
        byte roadFlags = reader.ReadByte();

        for (int i = 0; i < roads.Length; i++)
        {
            roads[i] = (roadFlags & (1 << i)) != 0;         // 1左移i位,然后按位与,提取roadFlags对应位的数据。按位与: 0010 0110 & 0000 0010 = 0000 0010
        }                                                   //0010 0110 & 0000 1000 = 0000 0000

        // 探索状态(是否被探索过)数据
        IsExplored = header >= 3 ? reader.ReadBoolean() : false;    // 存档版本3以上才有探索状态数据
        ShaderData.RefreshVisibility(this);
    }
Пример #26
0
    public void Load(BinaryReader reader, int header)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);

        if (header >= 4)
        {
            elevation -= 127;
        }

        RefreshPosition();
        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        walled       = reader.ReadBoolean();

        byte riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasIncomingRiver = false;
        }

        riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }

        int roadFlags = reader.ReadByte();

        for (int i = 0; i < roads.Length; i++)
        {
            roads[i] = (roadFlags & (1 << i)) != 0;
        }

        IsExplored = header >= 3 && reader.ReadBoolean();
        ShaderData.RefreshVisibility(this);
    }
    public void Load(BinaryReader reader)
    {
        terrainTypeIndex = reader.ReadByte();
        ShaderData.RefreshTerrain(this);

        elevation  = reader.ReadByte();
        elevation -= 127;

        RefreshPosition();

        waterLevel   = reader.ReadByte();
        urbanLevel   = reader.ReadByte();
        farmLevel    = reader.ReadByte();
        plantLevel   = reader.ReadByte();
        specialIndex = reader.ReadByte();
        walled       = reader.ReadBoolean();

        // Check if 8th bit is 1 which signals existence of river
        byte riverData = reader.ReadByte();

        if (riverData >= 128)
        {
            hasIncomingRiver = true;
            incomingRiver    = (HexDirection)(riverData - 128);          // Read direction
        }
        else
        {
            hasIncomingRiver = false;
        }

        // Check if 8th bit is 1 which signals existence of river
        riverData = reader.ReadByte();
        if (riverData >= 128)
        {
            hasOutgoingRiver = true;
            outgoingRiver    = (HexDirection)(riverData - 128);
        }
        else
        {
            hasOutgoingRiver = false;
        }

        int roadFlags = reader.ReadByte();

        for (int i = 0; i < Roads.Length; i++)
        {
            Roads[i] = (roadFlags & (1 << i)) != 0;             // If flag set then roads exists
        }

        IsExplored = reader.ReadBoolean();
        ShaderData.RefreshVisibility(this);
    }
Пример #28
0
 public ShadedGraphicProvider(ShaderData shaderData, IGraphicProvider provider)
 {
     if (shaderData == null)
     {
         throw new ArgumentNullException("shaderData");
     }
     if (provider == null)
     {
         throw new ArgumentNullException("provider");
     }
     this._shaderData = shaderData;
     this._provider   = provider;
 }
Пример #29
0
                private ShaderData ReadShaderData(string relative_path)
                {
                    BinaryReader reader = new BinaryReader(Project.directory_path + "\\" + relative_path);

                    if (!reader.is_ok)
                    {
                        return(null);
                    }

                    ShaderData shaderData = new ShaderData();

                    shaderData.Read(reader);
                    return(shaderData);
                }
Пример #30
0
    public void IncreaseVisibility(bool editMode)
    {
        visibility += 1;
        if (visibility == 1)
        {
            if (editMode == false)
            {
                IsExplored = true;
            }

            ShaderData.RefreshVisibility(this);
            UpdateVision();
        }
    }
Пример #31
0
        //获取shader的 keywords
        public static ShaderData GetShaderKeywords(Shader shader)
        {
            //2019.3接口
//            internal static void GetShaderVariantEntriesFiltered(
//                Shader                  shader,                     0
//                int                     maxEntries,                 1
//                string[]                filterKeywords,             2
//                ShaderVariantCollection excludeCollection,          3
//                out int[]               passTypes,                  4
//                out string[]            keywordLists,               5
//                out string[]            remainingKeywords)          6

            if (GetShaderVariantEntries == null)
            {
                GetShaderVariantEntries = typeof(ShaderUtil).GetMethod("GetShaderVariantEntriesFiltered",
                                                                       BindingFlags.NonPublic | BindingFlags.Static);
            }


            if (toolSVC == null)
            {
                Debug.LogError("不存在svc!");
                return(null);
            }

            var _filterKeywords    = new string[] { };
            var _passtypes         = new int[] { };
            var _keywords          = new string[] { };
            var _remainingKeywords = new string[] { };

            object[] args = new object[]
            {
                shader, 256, _filterKeywords, toolSVC, _passtypes, _keywords, _remainingKeywords
            };
            GetShaderVariantEntries.Invoke(null, args);

            ShaderData sd = new ShaderData();

            sd.passtypes = args[4] as int[];
            var kws = args[5] as string[];

            sd.keywords = new List <List <string> >();
            foreach (var kw in kws)
            {
                var _kws = kw.Split(' ');
                sd.keywords.Add(new List <string>(_kws));
            }

            return(sd);
        }
Пример #32
0
        void Create(ShaderBytecode bytecode)
        {
            var context = m_device.ImmediateContext;

            m_pixelShader = ToDispose(new PixelShader(m_device, bytecode));
            context.PixelShader.Set(m_pixelShader);

            /* Constant buffer */
            var shaderDataBuffer = ToDispose(new Buffer(m_device, Utilities.SizeOf<ShaderData>(),
                ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0));

            context.PixelShader.SetConstantBuffer(0, shaderDataBuffer);

            ShaderData shaderData = new ShaderData()
            {
                SimpleTint = 1,
            };

            context.UpdateSubresource(ref shaderData, shaderDataBuffer);

            /* Constant buffer per frame */
            m_shaderDataBufferPerFrame = ToDispose(new Buffer(m_device, Utilities.SizeOf<ShaderDataPerFrame>(),
                ResourceUsage.Default, BindFlags.ConstantBuffer, CpuAccessFlags.None, ResourceOptionFlags.None, 0));

            context.PixelShader.SetConstantBuffer(1, m_shaderDataBufferPerFrame);

            /* color buffer */
            var colorBuffer = ToDispose(Helpers11.CreateGameColorBuffer(m_device));

            var colorBufferView = ToDispose(new ShaderResourceView(m_device, colorBuffer, new ShaderResourceViewDescription()
            {
                Format = SharpDX.DXGI.Format.R32_UInt,
                Dimension = ShaderResourceViewDimension.Buffer,
                Buffer = new ShaderResourceViewDescription.BufferResource()
                {
                    ElementWidth = colorBuffer.Description.SizeInBytes / sizeof(uint),
                    ElementOffset = 0,
                },
            }));

            context.PixelShader.SetShaderResource(1, colorBufferView);

            /* Texture sampler */
            var sampler = ToDispose(new SamplerState(m_device, new SamplerStateDescription()
            {
                Filter = Filter.MinMagMipLinear,
                AddressU = TextureAddressMode.Wrap,
                AddressV = TextureAddressMode.Wrap,
                AddressW = TextureAddressMode.Wrap,
                BorderColor = new Color4(0),
                ComparisonFunction = Comparison.Never,
                MaximumAnisotropy = 16,
                MipLodBias = 0,
                MinimumLod = 0,
                MaximumLod = 16,
            }));

            context.PixelShader.SetSampler(0, sampler);
        }
Пример #33
0
		void testDynShaders()
		{
			DynamicShader ds = new DynamicShader() { 
				floatPrecision = DynamicShader.Precision.highp 
			};
			ds.VertexAttributes.Add(new ShaderData(typeof(Vector3), "in_position"));

			ShaderData<Matrix4> sdProjection = new ShaderData<Matrix4> ("projection");
			ShaderData<Matrix4> sdModelView = new ShaderData<Matrix4> ("modelView");
			ShaderData<Matrix4> sdModel = new ShaderData<Matrix4> ("model");

			ds.Uniforms.Add (sdProjection);
			ds.Uniforms.Add (sdModelView);
			ds.Uniforms.Add (sdModel);
			ds.Uniforms.Add(new ShaderData<Vector4>("lightPos"));
			ds.Uniforms.Add(new ShaderData<float>("heightScale"));
			ds.Uniforms.Add(new ShaderData<Vector2>("mapSize"));

			ds.Compile ();
		}
Пример #34
0
 private static bool IsNormalMap(ShaderData sd)
 {
     return sd.Field == FieldType.NormalMap;
 }
Пример #35
0
        /// <summary>	
        /// Compresses a set of shaders into a more compact form. 	
        /// </summary>	
        /// <param name="shaderBytecodes">An array of <see cref="SharpDX.D3DCompiler.ShaderBytecode"/> structures that describe the set of shaders to compress. </param>
        /// <returns>A compressed <see cref="SharpDX.D3DCompiler.ShaderBytecode"/>. </returns>
        /// <unmanaged>HRESULT D3DCompressShaders([In] int uNumShaders,[In, Buffer] D3D_SHADER_DATA* pShaderData,[In] int uFlags,[Out] ID3DBlob** ppCompressedData)</unmanaged>
        public static ShaderBytecode Compress(params ShaderBytecode[] shaderBytecodes)
        {
            Blob blob;
            // D3D.CompressShaders()
            var temp = new ShaderData[shaderBytecodes.Length];
            var handles = new GCHandle[shaderBytecodes.Length];
            try
            {
                for (int i = 0; i < temp.Length; i++)
                {
                    handles[i] = GCHandle.Alloc(shaderBytecodes[i].Data, GCHandleType.Pinned);

                    temp[i] = new ShaderData
                                  {
                                      BytecodePtr = handles[i].AddrOfPinnedObject(),
                                      BytecodeLength = shaderBytecodes[i].Data.Length
                                  };
                }
                D3D.CompressShaders(shaderBytecodes.Length, temp, 1, out blob);
            } finally
            {
                foreach (var gcHandle in handles)
                    gcHandle.Free();
            }
            return new ShaderBytecode(blob) {IsCompressed = true};
        }
 void Awake()
 {
     if (inst == null)
         inst = this;
 }
Пример #37
0
        public void Draw()
        {
            var game = Game.Instance;
            var dc = game.DeviceContext;

            dc.ClearRenderTargetView(game.DefaultRenderTargetView, Color.Maroon);
            dc.ClearDepthStencilView(game.DefaultDepthStencilView, DepthStencilClearFlags.Depth, 1, 0);

            if(Config.DrawTBN) tangentRenderer.Draw();

            var pass = Config.DrawWireframe ? passWireframe : passFill;

            pass.Apply();

            ShaderData data = new ShaderData();
            data.matWorld = Matrix.Identity;
            data.matView = Camera.MainCamera.ViewMatrix;
            data.matProjection = Camera.MainCamera.ProjectionMatrix;
            data.matWorldViewProj = data.matWorld * data.matView * data.matProjection;
            data.lightDir = Light.MainLight.LightDir4;
            data.eyePos = new Vector4(Camera.MainCamera.Position, 1);

            dc.UpdateSubresource(ref data, shaderBuffer);

            dc.VertexShader.SetConstantBuffer(0, shaderBuffer);
            dc.PixelShader.SetConstantBuffer(0, shaderBuffer);

            mesh.DrawBegin();
            for (int i = 0; i < mesh.SubmeshCount; ++i)
            {
                mesh.DrawSubmesh(i);
            }

            pass.Clear();
        }