Exemple #1
0
        /// <summary>
        /// Gets a single constant description in the constant table.
        /// </summary>
        /// <param name="effectHandle">The effect handle.</param>
        /// <returns>The constant description</returns>
        /// <unmanaged>HRESULT ID3DXConstantTable::GetConstantDesc([In] D3DXHANDLE hConstant,[Out, Buffer] D3DXCONSTANT_DESC* pConstantDesc,[InOut] unsigned int* pCount)</unmanaged>
        public ConstantDescription GetConstantDescription(SharpDX.Direct3D9.EffectHandle effectHandle)
        {
            int count        = 1;
            var descriptions = new ConstantDescription[1];

            GetConstantDescription(effectHandle, descriptions, ref count);
            return(descriptions[0]);
        }
Exemple #2
0
        /// <summary>
        /// Gets an array of constant descriptions in the constant table.
        /// </summary>
        /// <param name="effectHandle">The effect handle.</param>
        /// <returns>An array of constant descriptions</returns>
        /// <unmanaged>HRESULT ID3DXConstantTable::GetConstantDesc([In] D3DXHANDLE hConstant,[Out, Buffer] D3DXCONSTANT_DESC* pConstantDesc,[InOut] unsigned int* pCount)</unmanaged>
        public ConstantDescription[] GetConstantDescriptionArray(SharpDX.Direct3D9.EffectHandle effectHandle)
        {
            int count = 0;

            GetConstantDescription(effectHandle, null, ref count);
            var descriptions = new ConstantDescription[count];

            GetConstantDescription(effectHandle, descriptions, ref count);
            return(descriptions);
        }
Exemple #3
0
        private ConstantTable SetupDevice(OpsContext context, ShadeArgs args)
        {
            string         errStr = null;
            ConstantTable  constantTable;
            GraphicsStream pshader;
            GraphicsStream vshader;

            try
            {
                ConstantTable dummyTable;
                errStr  = null;
                vshader = ShaderLoader.CompileShader(ShadeVertex.VertexShader, "VertexShader", null, null, "vs_3_0", ShaderFlags.None, out errStr, out dummyTable);
            }
            finally
            {
                if (errStr != null && errStr.Length > 0)
                {
                    OpsConsole.WriteLine("Vertex Shader Compiler messages: " + errStr);
                    OpsConsole.WriteLine("If this message is regarding your entry point, it may be something other than the default 'main'.  Please use the argument 'Shader' to specify it.");
                }
            }


            try
            {
                Macro dxopsMacro = new Macro();
                dxopsMacro.Name       = "__DXOPS";
                dxopsMacro.Definition = "1";
                errStr  = null;
                pshader = ShaderLoader.CompileShaderFromFile(args.File, args.Shader, new Macro[] { dxopsMacro }, null, "ps_3_0", ShaderFlags.None, out errStr, out constantTable);
            }
            finally
            {
                if (errStr != null && errStr.Length > 0)
                {
                    OpsConsole.WriteLine("Pixel Shader Compiler messages: " + errStr);
                    OpsConsole.WriteLine("If this message is regarding your entry point, it may be something other than the default 'main'.  Please use the argument 'Shader' to specify it.");
                }
            }

            context.Device.SetRenderState(RenderStates.CullMode, (int)Cull.None);
            context.Device.SetRenderState(RenderStates.FillMode, (int)FillMode.Solid);
            context.Device.SetRenderState(RenderStates.AlphaTestEnable, false);
            context.Device.SetRenderState(RenderStates.AlphaBlendEnable, false);
            context.Device.SetRenderState(RenderStates.StencilEnable, false);
            context.Device.SetRenderState(RenderStates.ZEnable, false);
            context.Device.SetRenderState(RenderStates.ZBufferWriteEnable, false);

            context.Device.DepthStencilSurface = null;

            VertexDeclaration decl = new VertexDeclaration(context.Device, ShadeVertex.VertexDeclaration);

            context.Device.VertexDeclaration = decl;

            VertexShader vs = new VertexShader(context.Device, vshader);

            context.Device.VertexShader = vs;

            PixelShader ps = new PixelShader(context.Device, pshader);

            context.Device.PixelShader = ps;



            constantTable.SetDefaults(context.Device);

            foreach (OpsParsedArgument constant in args.Constants)
            {
                EffectHandle h = constantTable.GetConstant(null, constant.Name);
                if (h == null)
                {
                    OpsConsole.WriteLine("WARNING: Parameter '{0}' was not found in shader.", constant.Name);
                    continue;
                }

                ConstantDescription[] cds = constantTable.GetConstantDescription(h, 1);
                ConstantDescription   cd  = cds[0];
                switch (cd.Class)
                {
                case ParameterClass.Object:
                {    //texture
                    switch (cd.ParameterType)
                    {
                    case ParameterType.Texture:
                    case ParameterType.Texture1D:
                    case ParameterType.Texture2D:
                    case ParameterType.Texture3D:
                    case ParameterType.TextureCube:
                    {
                        OpsTexture container = context.GetTexture(constant.Value);

                        int sampler = constantTable.GetSamplerIndex(h);
                        context.Device.SetTexture(sampler, container.Texture);
                    }
                    break;
                    }
                    break;
                }

                case ParameterClass.Scalar:
                case ParameterClass.Vector:
                case ParameterClass.MatrixColumns:
                case ParameterClass.MatrixRows:
                {
                    ArrayList floatList    = new ArrayList();
                    string[]  floatStrings = constant.Value.Split(new char[] { ' ', ',' });
                    foreach (string floatStr in floatStrings)
                    {
                        if (floatStr.Length > 0)
                        {
                            floatList.Add(float.Parse(floatStr));
                        }
                    }
                    float[] floats = (float[])floatList.ToArray(typeof(float));

                    constantTable.SetValue(context.Device, h, floats);
                }
                break;
                }
            }

            return(constantTable);
        }
Exemple #4
0
        protected void PopulateDef( ConstantDescription d3DDesc, GpuProgramParameters.GpuConstantDefinition def )
	    {
	        def.ArraySize = d3DDesc.Elements;
		    switch(d3DDesc.Type)
		    {
		    case ParameterType.Int:
			    switch(d3DDesc.Columns)
			    {
			        case 1:
			            def.ConstantType = GpuProgramParameters.GpuConstantType.Int1;
			            break;
			        case 2:
			            def.ConstantType = GpuProgramParameters.GpuConstantType.Int2;
			            break;
			        case 3:
			            def.ConstantType = GpuProgramParameters.GpuConstantType.Int3;
			            break;
			        case 4:
			            def.ConstantType = GpuProgramParameters.GpuConstantType.Int4;
			            break;
			    } // columns
		            break;
		    case ParameterType.Float:
			    switch(d3DDesc.Class)
			    {
			    case ParameterClass.MatrixColumns:
                    case ParameterClass.MatrixRows:
				    {
					    var firstDim = d3DDesc.RegisterCount / d3DDesc.Elements;
					    var secondDim = d3DDesc.Class == ParameterClass.MatrixRows ? d3DDesc.Columns : d3DDesc.Rows;
					    
                        switch(firstDim)
					    {
					    case 2:
						    switch(secondDim)
						    {
						    case 2:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_2X2;
							    def.ElementSize = 8; // HLSL always packs
							    break;
						    case 3:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_2X3;
							    def.ElementSize = 8; // HLSL always packs
							    break;
						    case 4:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_2X4;
							    def.ElementSize = 8; 
							    break;
						    } // columns
						    break;
					    case 3:
						    switch(secondDim)
						    {
						    case 2:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_3X2;
							    def.ElementSize = 12; // HLSL always packs
							    break;
						    case 3:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_3X3;
							    def.ElementSize = 12; // HLSL always packs
							    break;
						    case 4:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_3X4;
							    def.ElementSize = 12; 
							    break;
						    } // columns
						    break;
					    case 4:
						    switch(secondDim)
						    {
						    case 2:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_4X2;
							    def.ElementSize = 16; // HLSL always packs
							    break;
						    case 3:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_4X3;
							    def.ElementSize = 16; // HLSL always packs
							    break;
						    case 4:
							    def.ConstantType = GpuProgramParameters.GpuConstantType.Matrix_4X4;
							    def.ElementSize = 16; 
							    break;
						    } // secondDim
						    break;

					    } // firstDim
				    }
				    break;
			    case ParameterClass.Scalar:
			    case ParameterClass.Vector:
				    switch(d3DDesc.Columns)
				    {
				    case 1:
					    def.ConstantType = GpuProgramParameters.GpuConstantType.Float1;
					    break;
				    case 2:
					    def.ConstantType = GpuProgramParameters.GpuConstantType.Float2;
					    break;
				    case 3:
					    def.ConstantType = GpuProgramParameters.GpuConstantType.Float3;
					    break;
				    case 4:
					    def.ConstantType = GpuProgramParameters.GpuConstantType.Float4;
					    break;
				    } // columns
				    break;
			    }
		            break;
		    default:
			    // not mapping samplers, don't need to take the space 
			    break;
		    };

		    // D3D9 pads to 4 elements
            def.ElementSize = GpuProgramParameters.GpuConstantDefinition.GetElementSize(def.ConstantType, true);

	    }