public Resource Load(ResourceInformation info) { EffectCompiler compiler = new EffectCompiler(); EffectCompilerFlags flags = EffectCompilerFlags.None; if (enableDebug) { flags = EffectCompilerFlags.Debug | EffectCompilerFlags.OptimizationLevel0 | EffectCompilerFlags.SkipOptimization; } var effectResult = compiler.CompileFromFile(info.Filepath, flags); if (effectResult.HasErrors) { FearLog.Log("ERROR Compiling effect; " + info.Filepath, LogPriority.EXCEPTION); foreach (SharpDX.Toolkit.Diagnostics.LogMessage message in effectResult.Logger.Messages) { FearLog.Log("\t" + message.Text, LogPriority.EXCEPTION); } return(new FearMaterial()); } else { Effect effect = new Effect(device, effectResult.EffectData); effect.CurrentTechnique = effect.Techniques[info.GetString("Technique")]; FearMaterial mat = new FearMaterial(info.Name, effect); return(mat); } }
public void Test() { var device = GraphicsDevice.New(); // Compile a toolkit effect from a file var result = EffectCompiler.CompileFromFile("toto.fx"); // Check that we don't have any errors Assert.False(result.HasErrors); var bytecode = result.EffectData; var effect = new Effect(device, bytecode); var tex1 = TextureCube.New(device, 64, PixelFormat.R8.UNorm); var samplerState = device.SamplerStates.PointWrap; effect.Parameters["SkyBoxTexture"].SetResource(tex1); effect.Parameters["SkyBoxSampler"].SetResource(samplerState); effect.Techniques[0].Passes[0].Apply(); Console.WriteLine(effect.Parameters.Count); effect.Dispose(); device.Dispose(); }
public DeviceManager() { Device = new Rendering.DirectX11.Dx11RenderingDevice(); // Recreate legacy environment { ___LegacyDevice = GraphicsDevice.New(((Rendering.DirectX11.Dx11RenderingDevice)Device).Device); LevelData.ImportedGeometry.Device = ___LegacyDevice; // Load legacy effects string dir = Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().Location); IEnumerable <string> effectFiles = Directory.EnumerateFiles(dir + "\\Rendering\\Legacy", "*.fx"); foreach (string fileName in effectFiles) { string effectName = Path.GetFileNameWithoutExtension(fileName); EffectCompilerResult effect = EffectCompiler.CompileFromFile(fileName); if (effect.HasErrors) { string errors = ""; foreach (var err in effect.Logger.Messages) { errors += err + Environment.NewLine; } throw new Exception("Could not compile effect '" + fileName + "'" + Environment.NewLine + errors); } ___LegacyEffects.Add(effectName, new Effect(___LegacyDevice, effect.EffectData)); } // Load legacy font SpriteFontData fontData = SpriteFontData.Load(ResourcesC.ResourcesC.font); fontData.DefaultCharacter = '\n'; // Don't crash on uncommon Unicode values ___LegacyFont = SpriteFont.New(___LegacyDevice, fontData); } }
public static Effect Load(string filePathAndName) { string extension = Path.GetExtension(filePathAndName); string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string fullPath = Path.Combine(baseDir, filePathAndName); if (!File.Exists(fullPath)) { Debugger.Break(); } if (extension == ".fx") { EffectCompiler compiler = new EffectCompiler(); var result = compiler.CompileFromFile(fullPath, EffectCompilerFlags.Debug); if (result.HasErrors) { var thing = result.Logger.Messages; Debugger.Break(); return(null); } else { return(new Effect(Engine.GraphicsContext.Device, result.EffectData)); } } if (extension == ".fxo") { // todo } return(null); }
protected override void LoadContent() { // Importer for many models var importer = new AssimpImporter(); // Load a specific model //string fileName = System.IO.Path.GetFullPath(Content.RootDirectory + "/tower.3ds"); //Scene scene = importer.ImportFile(fileName, PostProcessSteps.MakeLeftHanded); //m_model = new Model(scene, GraphicsDevice, Content); // Load shader EffectCompilerFlags compilerFlags = EffectCompilerFlags.None; EffectCompiler compiler = new EffectCompiler(); #if DEBUG compilerFlags |= EffectCompilerFlags.Debug; #endif var simpleShaderCompileResult = compiler.CompileFromFile(Content.RootDirectory + "/pointlight.fx", compilerFlags); if (simpleShaderCompileResult.HasErrors) { System.Console.WriteLine(simpleShaderCompileResult.Logger.Messages); System.Diagnostics.Debugger.Break(); } m_simpleEffect = new SharpDX.Toolkit.Graphics.Effect(GraphicsDevice, simpleShaderCompileResult.EffectData); m_simpleEffect.Parameters["diffuseSampler"].SetResource(m_linearSamplerState); base.LoadContent(); map = new Map(@"Content\map.PNG", new Size2(20, 20)); map.LoadContent(GraphicsDevice, Content); player = new Player(new Vector3(0.0f, 10.0f, 0.0f), GraphicsDevice); player.Map = map; spritebatch = new SpriteBatch(GraphicsDevice, 2048); compass = Content.Load <Texture2D>("compass.png"); torch = Content.Load <Texture2D>("torchPlaceholder.png"); compassNeedle = Content.Load <Texture2D>("needle.png"); particle = Content.Load <Texture2D>("particle.png"); gameOver = Content.Load <Texture2D>("gameover.png"); emitter.position = new Vector2(width - torch.Width / 3, height - torch.Height / 3); }
// DepthStencilState _depthStencilDrawWhereNothing; public Background(GraphicsDevice graphicsDevice) { /* var depthStencilStateDesc = SharpDX.Direct3D11.DepthStencilStateDescription.Default(); * depthStencilStateDesc.IsDepthEnabled = false; * depthStencilStateDesc.DepthWriteMask = SharpDX.Direct3D11.DepthWriteMask.Zero; * _noDepthState = DepthStencilState.New(graphicsDevice, "NoZBuffer", depthStencilStateDesc);*/ EffectCompilerFlags compilerFlags = EffectCompilerFlags.None; #if DEBUG compilerFlags |= EffectCompilerFlags.Debug; #endif var shaderCompileResult = EffectCompiler.CompileFromFile("Content/sky.fx", compilerFlags); if (shaderCompileResult.HasErrors) { System.Console.WriteLine(shaderCompileResult.Logger.Messages); System.Diagnostics.Debugger.Break(); } _effect = new SharpDX.Toolkit.Graphics.Effect(graphicsDevice, shaderCompileResult.EffectData); }
protected override Diagnostics.Logger ProcessFileAndGetLogResults(string inputFilePath, string outputFilePath, string dependencyFilePath, TkItem item) { var compilerFlags = Debug ? EffectCompilerFlags.Debug : EffectCompilerFlags.None; if (!string.IsNullOrEmpty(CompilerFlags)) { compilerFlags |= (EffectCompilerFlags)Enum.Parse(typeof(EffectCompilerFlags), CompilerFlags); } var compilerResult = compiler.CompileFromFile(inputFilePath, compilerFlags, null, null, item.DynamicCompiling, dependencyFilePath); if (!compilerResult.HasErrors && compilerResult.EffectData != null) { CreateDirectoryIfNotExists(outputFilePath); if (item.OutputCs) { var codeWriter = new EffectDataCodeWriter { Namespace = item.OutputNamespace, ClassName = item.OutputClassName, FieldName = item.OutputFieldName, }; using (var stream = new NativeFileStream(outputFilePath, NativeFileMode.Create, NativeFileAccess.Write, NativeFileShare.Write)) codeWriter.Write(compilerResult.EffectData, new StreamWriter(stream, Encoding.UTF8)); } else { compilerResult.EffectData.Save(outputFilePath); } } return(compilerResult.Logger); }
private static Effect LoadEffect(string name) { EffectCompilerResult result = EffectCompiler.CompileFromFile(_path + "\\Editor\\" + name + ".fx"); if (result.HasErrors) { string errors = ""; foreach (SharpDX.Toolkit.Diagnostics.LogMessage err in result.Logger.Messages) { errors += err + Environment.NewLine; } LogManager.GetCurrentClassLogger().Log(LogLevel.Error, "Could not compile effect '" + name + ".fx'"); MessageBox.Show("Could not compile effect '" + name + ".fx'" + Environment.NewLine + errors, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return(null); } Effect effect = new Effect(GraphicsDevice, result.EffectData); return(effect); }
public VoxelRenderer(GraphicsDevice graphicsDevice, ContentManager contentManager) { _cubeVertexBuffer = Buffer.Vertex.New( graphicsDevice, new[] { // 3D coordinates UV Texture coordinates new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, -1.0f), Normal = -Vector3.UnitZ, Texcoord = new Vector2(0.0f, 1.0f) }, // Front new CubeVertex() { Position = new Vector3(-1.0f, 1.0f, -1.0f), Normal = -Vector3.UnitZ, Texcoord = new Vector2(0.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, 1.0f, -1.0f), Normal = -Vector3.UnitZ, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, -1.0f), Normal = -Vector3.UnitZ, Texcoord = new Vector2(0.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(1.0f, 1.0f, -1.0f), Normal = -Vector3.UnitZ, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, -1.0f, -1.0f), Normal = -Vector3.UnitZ, Texcoord = new Vector2(1.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, 1.0f), Normal = Vector3.UnitZ, Texcoord = new Vector2(1.0f, 0.0f) }, // BACK new CubeVertex() { Position = new Vector3(1.0f, 1.0f, 1.0f), Normal = Vector3.UnitZ, Texcoord = new Vector2(0.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, 1.0f, 1.0f), Normal = Vector3.UnitZ, Texcoord = new Vector2(1.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, 1.0f), Normal = Vector3.UnitZ, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, -1.0f, 1.0f), Normal = Vector3.UnitZ, Texcoord = new Vector2(0.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, 1.0f, 1.0f), Normal = Vector3.UnitZ, Texcoord = new Vector2(0.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, 1.0f, -1.0f), Normal = Vector3.UnitY, Texcoord = new Vector2(0.0f, 1.0f) }, // Top new CubeVertex() { Position = new Vector3(-1.0f, 1.0f, 1.0f), Normal = Vector3.UnitY, Texcoord = new Vector2(0.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, 1.0f, 1.0f), Normal = Vector3.UnitY, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, 1.0f, -1.0f), Normal = Vector3.UnitY, Texcoord = new Vector2(0.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(1.0f, 1.0f, 1.0f), Normal = Vector3.UnitY, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, 1.0f, -1.0f), Normal = Vector3.UnitY, Texcoord = new Vector2(1.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, -1.0f), Normal = -Vector3.UnitY, Texcoord = new Vector2(1.0f, 0.0f) }, // Bottom new CubeVertex() { Position = new Vector3(1.0f, -1.0f, 1.0f), Normal = -Vector3.UnitY, Texcoord = new Vector2(0.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, 1.0f), Normal = -Vector3.UnitY, Texcoord = new Vector2(1.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, -1.0f), Normal = -Vector3.UnitY, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, -1.0f, -1.0f), Normal = -Vector3.UnitY, Texcoord = new Vector2(0.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, -1.0f, 1.0f), Normal = -Vector3.UnitY, Texcoord = new Vector2(0.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, -1.0f), Normal = -Vector3.UnitX, Texcoord = new Vector2(0.0f, 1.0f) }, // Left new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, 1.0f), Normal = -Vector3.UnitX, Texcoord = new Vector2(0.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, 1.0f, 1.0f), Normal = -Vector3.UnitX, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, -1.0f, -1.0f), Normal = -Vector3.UnitX, Texcoord = new Vector2(0.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, 1.0f, 1.0f), Normal = -Vector3.UnitX, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(-1.0f, 1.0f, -1.0f), Normal = -Vector3.UnitX, Texcoord = new Vector2(1.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(1.0f, -1.0f, -1.0f), Normal = Vector3.UnitX, Texcoord = new Vector2(1.0f, 0.0f) }, // Right new CubeVertex() { Position = new Vector3(1.0f, 1.0f, 1.0f), Normal = Vector3.UnitX, Texcoord = new Vector2(0.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(1.0f, -1.0f, 1.0f), Normal = Vector3.UnitX, Texcoord = new Vector2(1.0f, 1.0f) }, new CubeVertex() { Position = new Vector3(1.0f, -1.0f, -1.0f), Normal = Vector3.UnitX, Texcoord = new Vector2(1.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, 1.0f, -1.0f), Normal = Vector3.UnitX, Texcoord = new Vector2(0.0f, 0.0f) }, new CubeVertex() { Position = new Vector3(1.0f, 1.0f, 1.0f), Normal = Vector3.UnitX, Texcoord = new Vector2(0.0f, 1.0f) } }, SharpDX.Direct3D11.ResourceUsage.Immutable); // Create an input layout from the vertices _vertexInputLayout = VertexInputLayout.New( VertexBufferLayout.New(0, new VertexElement[] { new VertexElement("POSITION_CUBE", 0, SharpDX.DXGI.Format.R32G32B32_Float, 0), new VertexElement("NORMAL", 0, SharpDX.DXGI.Format.R32G32B32_Float, sizeof(float) * 3), new VertexElement("TEXCOORD", 0, SharpDX.DXGI.Format.R32G32_Float, sizeof(float) * 6) }, 0), VertexBufferLayout.New(1, new VertexElement[] { new VertexElement("POSITION_INSTANCE", SharpDX.DXGI.Format.R32_SInt) }, 1)); // Create instance buffer for every VoxelInfo _voxelTypeRenderingData = new VoxelTypeInstanceData[TypeInformation.GetNumTypes() - 1]; for (int i = 0; i < _voxelTypeRenderingData.Length; ++i) { _voxelTypeRenderingData[i] = new VoxelTypeInstanceData(graphicsDevice, (VoxelType)(i + 1)); } LoadTextures(contentManager); // load shader EffectCompilerFlags compilerFlags = EffectCompilerFlags.None; #if DEBUG compilerFlags |= EffectCompilerFlags.Debug; #endif var voxelShaderCompileResult = EffectCompiler.CompileFromFile("Content/voxel.fx", compilerFlags); if (voxelShaderCompileResult.HasErrors) { System.Console.WriteLine(voxelShaderCompileResult.Logger.Messages); System.Diagnostics.Debugger.Break(); } _voxelEffect = new SharpDX.Toolkit.Graphics.Effect(graphicsDevice, voxelShaderCompileResult.EffectData); // setup states var rasterizerStateDesc = SharpDX.Direct3D11.RasterizerStateDescription.Default(); rasterizerStateDesc.CullMode = SharpDX.Direct3D11.CullMode.Back; _backfaceCullingState = RasterizerState.New(graphicsDevice, "CullModeBack", rasterizerStateDesc); rasterizerStateDesc.CullMode = SharpDX.Direct3D11.CullMode.None; _noneCullingState = RasterizerState.New(graphicsDevice, "CullModeNone", rasterizerStateDesc); var depthStencilStateDesc = SharpDX.Direct3D11.DepthStencilStateDescription.Default(); depthStencilStateDesc.IsDepthEnabled = true; _depthStencilStateState = DepthStencilState.New(graphicsDevice, "NormalZBufferUse", depthStencilStateDesc); var samplerStateDesc = SharpDX.Direct3D11.SamplerStateDescription.Default(); samplerStateDesc.AddressV = SharpDX.Direct3D11.TextureAddressMode.Mirror; samplerStateDesc.AddressU = SharpDX.Direct3D11.TextureAddressMode.Mirror; samplerStateDesc.Filter = SharpDX.Direct3D11.Filter.MinMagMipPoint; _pointSamplerState = SamplerState.New(graphicsDevice, "PointSampler", samplerStateDesc); _voxelEffect.Parameters["PointSampler"].SetResource(_pointSamplerState); var blendStateDesc = SharpDX.Direct3D11.BlendStateDescription.Default(); _blendStateOpaque = BlendState.New(graphicsDevice, "Opaque", blendStateDesc); blendStateDesc.RenderTarget[0].IsBlendEnabled = true; blendStateDesc.RenderTarget[0].SourceBlend = SharpDX.Direct3D11.BlendOption.SourceAlpha; blendStateDesc.RenderTarget[0].DestinationBlend = SharpDX.Direct3D11.BlendOption.InverseSourceAlpha; blendStateDesc.RenderTarget[0].BlendOperation = SharpDX.Direct3D11.BlendOperation.Add; _blendStateTransparent = BlendState.New(graphicsDevice, "AlphaBlend", blendStateDesc); // vertexbuffer for a single instance _singleInstanceBuffer = Buffer.Vertex.New <Int32>(graphicsDevice, 1, SharpDX.Direct3D11.ResourceUsage.Dynamic); }