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; }
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 ); }
public TexturedGraphicModule(string programID) { _programID = programID; Program = MainGraphic.GetProgramById(_programID); Program.DisposeChildren = true; Data = new ShaderData(); }
/// <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); }
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);
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; }
//获取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); }
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); } }
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; } }
//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; } }
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; } } }
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(); }
public void DecreaseVisibility() { visibility -= 1; if (visibility == 0) { ShaderData.RefreshVisibility(this); } }
public void ResetVisibility() { if (visibility > 0) { visibility = 0; ShaderData.RefreshVisibility(this); } }
public void ResetExploration() { if (IsExplored) { IsExplored = false; ShaderData.RefreshVisibility(this); } }
public void IncreaseVisibility() { visibility += 1; if (visibility == 1) { ShaderData.RefreshVisibility(this); } }
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); } }
public void IncreaseVisibility() { visibility += 1; if (visibility == 1) { IsExplored = true; ShaderData.RefreshVisibility(this); } }
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); }
public void DecreaseVisibility() { visibility -= 1; if (visibility <= 0) { ShaderData.RefreshVisibility(this); visibility = 0; // Should never have have fewer than 0 units providing visibility } }
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; } } } } }
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 }); }
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); }
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); }
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); }
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; }
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); }
public void IncreaseVisibility(bool editMode) { visibility += 1; if (visibility == 1) { if (editMode == false) { IsExplored = true; } ShaderData.RefreshVisibility(this); UpdateVision(); } }
//获取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); }
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); }
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 (); }
private static bool IsNormalMap(ShaderData sd) { return sd.Field == FieldType.NormalMap; }
/// <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; }
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(); }