예제 #1
0
        /*
         #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);
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
        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);
예제 #7
0
        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);
        }