/* #region Vertex Elements * public static VertexElement[] VertexElements = * { * // first one "should" be Vertex4 * new VertexElement(0, 0, VertexElementFormat.Vector3, VertexElementMethod.Default, VertexElementUsage.Position, 0), * new VertexElement(0, 16, VertexElementFormat.Vector4, VertexElementMethod.Default, VertexElementUsage.TextureCoordinate, 0), * }; #endregion * * private Texture TextureDif; * private Texture TextureNrm; * private VertexDeclaration VertexDeclaration; */ public override void Setup( SlimDX.Direct3D10.Device device, ShaderLibrary shaderLibrary, string basePath) { /* * this.VertexDeclaration = new VertexDeclaration(device, VertexElements); * * string texturePath; * * texturePath = Path.Combine(basePath, block.Textures[0]); * if (File.Exists(texturePath) == false) * { * this.TextureDif = null; * } * else * { * this.TextureDif = Texture.FromFile(device, texturePath); * } * * texturePath = Path.Combine(basePath, block.Textures[1]); * if (File.Exists(texturePath) == false) * { * this.TextureNrm = null; * } * else * { * this.TextureNrm = Texture.FromFile(device, texturePath); * } */ }
public override void Setup(Device device, ShaderLibrary shaderLibrary, string basePath) { this._MaterialLoader.Setup(device, basePath, this.Block.Material); string vertexShaderName = "deformablewindow"; string pixelShaderName = "deformablewindow"; this._ShaderLoader.Setup( device, shaderLibrary.GetVertexShaderData(vertexShaderName), shaderLibrary.GetFragmentShaderData(pixelShaderName), new[] { new InputElement("POSITION", 0, DXGI.Format.R32G32B32A32_Float, 0, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 0, DXGI.Format.R16G16B16A16_SNorm, 16, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 1, DXGI.Format.R32G32B32A32_Float, 24, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 2, DXGI.Format.R32G32_Float, 40, 0, IC.PerVertexData, 0), }); var vertexBuffer = new Buffer(device, 48 * this.Block.VertexData0.Count, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = vertexBuffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.VertexData0.ToArray()); vertexBuffer.Unmap(); } this._VertexData0Buffer = vertexBuffer; var indexBuffer = new Buffer(device, 2 * this.Block.Faces.Count, ResourceUsage.Dynamic, BindFlags.IndexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = indexBuffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.Faces.ToArray()); indexBuffer.Unmap(); } this._IndexBuffer = indexBuffer; this._VertexShaderConstantBuffer1 = new ConstantBuffer <VertexShaderGlobals>(device); this._PixelShaderConstantBuffer0 = new ConstantBuffer <PixelShaderGlobalConstants>(device); this._PixelShaderConstantBuffer1 = new ConstantBuffer <PixelShaderInstanceConstants>(device); this._PixelShaderConstantBuffer2 = new ConstantBuffer <PixelShaderMaterialConstants>(device); this._PixelShaderConstantBuffer4 = new ConstantBuffer <PixelShaderBooleans>(device); }
public void Setup(Device device, IRenderBlock block, ShaderLibrary shaderLibrary, string basePath) { if (block != null && !(block is TRenderBlock)) { throw new ArgumentException("wrong block type", "block"); } this.Block = (TRenderBlock)block; this.Setup(device, shaderLibrary, basePath); }
private void LoadShaderBundles() { try { string gamePath = (string) Registry.GetValue( @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Steam App 8190", "InstallLocation", null); if (gamePath == null) { //throw new InvalidOperationException("could not find Just Cause 2 install location"); } var shaderBundlePath = Path.Combine(gamePath, "DX10_Shaders_F.shader_bundle"); if (File.Exists(shaderBundlePath) == false) { throw new FileNotFoundException("shader bundle is missing", shaderBundlePath); } var specialShaderBundlePath = Path.Combine(gamePath, "DX10_SpecialShaders_F.shader_bundle"); if (File.Exists(specialShaderBundlePath) == false) { throw new FileNotFoundException("special shader bundle is missing", specialShaderBundlePath); } using (var input = File.OpenRead(shaderBundlePath)) { this._ShaderBundle = new ShaderLibrary(); this._ShaderBundle.Deserialize(input); } using (var input = File.OpenRead(specialShaderBundlePath)) { this._SpecialShaderBundle = new ShaderLibrary(); this._SpecialShaderBundle.Deserialize(input); } } catch (Exception e) { MessageBox.Show(String.Format("Failed to load shader bundles.\n\nError: {0}\n\n{1}", e.Message, e), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public override void Setup(Device device, ShaderLibrary shaderLibrary, string basePath) { this._MaterialLoader.Setup(device, basePath, this.Block.Material); string vertexShaderName; string pixelShaderName; var small = this.Block.HasBigVertices == false; if (this.Block.Mode == 4) { vertexShaderName = small ? "skinnedgeneraleyegloss" : "skinnedgeneraleyegloss8"; pixelShaderName = "skinnedgeneraleyegloss"; } else if (this.Block.Mode == 1) { vertexShaderName = small ? "skinnedgeneral" : "skinnedgeneral8"; pixelShaderName = "skinnedgeneralhair"; } else { vertexShaderName = small ? "skinnedgeneral" : "skinnedgeneral8"; pixelShaderName = "skinnedgeneral"; } if (this.Block.HasBigVertices == false) { this._ShaderLoader.Setup( device, shaderLibrary.GetVertexShaderData(vertexShaderName), shaderLibrary.GetFragmentShaderData(pixelShaderName), new[] { new InputElement("POSITION", 0, DXGI.Format.R32G32B32_Float, 0, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 1, DXGI.Format.R8G8B8A8_UNorm, 12, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 2, DXGI.Format.R8G8B8A8_UInt, 16, 0, IC.PerVertexData, 0), new InputElement("COLOR", 0, DXGI.Format.R8G8B8A8_UNorm, 0, 1, IC.PerVertexData, 0), new InputElement("COLOR", 1, DXGI.Format.R8G8B8A8_UNorm, 4, 1, IC.PerVertexData, 0), new InputElement("COLOR", 2, DXGI.Format.R8G8B8A8_UNorm, 8, 1, IC.PerVertexData, 0), new InputElement("TEXCOORD", 0, DXGI.Format.R32G32_Float, 12, 1, IC.PerVertexData, 0), }); var vertexBuffer = new Buffer(device, 20 * this.Block.VertexData0Small.Count, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = vertexBuffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.VertexData0Small.ToArray()); vertexBuffer.Unmap(); } this._VertexData0Buffer = vertexBuffer; } else { this._ShaderLoader.Setup( device, shaderLibrary.GetVertexShaderData(vertexShaderName), shaderLibrary.GetFragmentShaderData(pixelShaderName), new[] { new InputElement("POSITION", 0, DXGI.Format.R32G32B32_Float, 0, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 1, DXGI.Format.R8G8B8A8_UNorm, 12, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 2, DXGI.Format.R8G8B8A8_UNorm, 16, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 3, DXGI.Format.R8G8B8A8_UInt, 20, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 4, DXGI.Format.R8G8B8A8_UInt, 24, 0, IC.PerVertexData, 0), new InputElement("COLOR", 0, DXGI.Format.R8G8B8A8_UNorm, 0, 1, IC.PerVertexData, 0), new InputElement("COLOR", 1, DXGI.Format.R8G8B8A8_UNorm, 4, 1, IC.PerVertexData, 0), new InputElement("COLOR", 2, DXGI.Format.R8G8B8A8_UNorm, 8, 1, IC.PerVertexData, 0), new InputElement("TEXCOORD", 0, DXGI.Format.R32G32_Float, 12, 1, IC.PerVertexData, 0), }); var vertexBuffer = new Buffer(device, 28 * this.Block.VertexData0Big.Count, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = vertexBuffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.VertexData0Big.ToArray()); vertexBuffer.Unmap(); } this._VertexData0Buffer = vertexBuffer; } // Extra Buffer { var extraBuffer = new Buffer(device, 20 * this.Block.VertexData1.Count, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = extraBuffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.VertexData1.ToArray()); extraBuffer.Unmap(); } this._VertexData1Buffer = extraBuffer; } // Index Buffer { var indexBuffer = new Buffer(device, 2 * this.Block.Faces.Count, ResourceUsage.Dynamic, BindFlags.IndexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = indexBuffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.Faces.ToArray()); indexBuffer.Unmap(); } this._IndexBuffer = indexBuffer; } // Constant Buffer { this._VertexShaderConstantBuffer1 = new ConstantBuffer <VertexShaderGlobals>(device); this._PixelShaderConstantBuffer0 = new ConstantBuffer <PixelShaderGlobalConstants>(device); this._PixelShaderConstantBuffer1 = new ConstantBuffer <PixelShaderInstanceConstants>(device); this._PixelShaderConstantBuffer2 = new ConstantBuffer <PixelShaderMaterialConstants>(device); this._PixelShaderConstantBuffer4 = new ConstantBuffer <PixelShaderBooleans>(device); } }
public abstract void Setup(Device device, ShaderLibrary shaderLibrary, string basePath);
public override void Setup(Device device, ShaderLibrary shaderLibrary, string basePath) { this._MaterialLoader.Setup(device, basePath, this.Block.Material); string vertexShaderName = "lambert"; string pixelShaderName = "lambert"; if (this.Block.Unknown28 == 0) { this._ShaderLoader.Setup( device, shaderLibrary.GetVertexShaderData(vertexShaderName), shaderLibrary.GetFragmentShaderData(pixelShaderName), new[] { new InputElement("POSITION", 0, DXGI.Format.R32G32B32_Float, 0, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 0, DXGI.Format.R32G32B32A32_Float, 12, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 1, DXGI.Format.R32G32B32_Float, 28, 0, IC.PerVertexData, 0), }); var vertexData0Buffer = new Buffer(device, 40 * this.Block.VertexData0Big.Count, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = vertexData0Buffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.VertexData0Big.ToArray()); vertexData0Buffer.Unmap(); } this._VertexData0Buffer = vertexData0Buffer; } else if (this.Block.Unknown28 == 1) { this._ShaderLoader.Setup( device, shaderLibrary.GetVertexShaderData(vertexShaderName), shaderLibrary.GetFragmentShaderData(pixelShaderName), new[] { new InputElement("TEXCOORD", 0, DXGI.Format.R16G16B16A16_SNorm, 0, 0, IC.PerVertexData, 0), new InputElement("TEXCOORD", 1, DXGI.Format.R32G32B32_Float, 8, 0, IC.PerVertexData, 0), new InputElement("POSITION", 0, DXGI.Format.R16G16B16A16_SNorm, 20, 0, IC.PerVertexData, 0), }); var vertexData0Buffer = new Buffer(device, 28 * this.Block.VertexData0Small.Count, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = vertexData0Buffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.VertexData0Small.ToArray()); vertexData0Buffer.Unmap(); } this._VertexData0Buffer = vertexData0Buffer; } var indexBuffer = new Buffer(device, 2 * this.Block.Faces.Count, ResourceUsage.Dynamic, BindFlags.IndexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); using (var stream = indexBuffer.Map(MapMode.WriteDiscard, MapFlags.None)) { stream.WriteRange(this.Block.Faces.ToArray()); indexBuffer.Unmap(); } this._IndexBuffer = indexBuffer; this._VertexShaderConstantBuffer1 = new ConstantBuffer <VertexShaderGlobals>(device); }