예제 #1
0
        static Texture2D ConvertFromBitmap(Bitmap image)
        {
            System.Drawing.Imaging.BitmapData data = image.LockBits(new System.Drawing.Rectangle(0, 0, image.Width, image.Height),
                                        System.Drawing.Imaging.ImageLockMode.ReadWrite, image.PixelFormat);
            int bytes = data.Stride * image.Height;
            DataStream stream = new SlimDX.DataStream(bytes, true, true);
            stream.WriteRange(data.Scan0,bytes);
            stream.Position = 0;
            DataRectangle dRect = new SlimDX.DataRectangle(data.Stride, stream);

            SlimDX.DXGI.SampleDescription sampleDesc = new SlimDX.DXGI.SampleDescription();
            sampleDesc.Count = 1;
            sampleDesc.Quality = 0;

            Texture2DDescription texDesc = new Texture2DDescription()
            {
                ArraySize = 1,
                MipLevels = 1,
                SampleDescription = sampleDesc,
                Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm,
                CpuAccessFlags = CpuAccessFlags.Write,
                BindFlags = BindFlags.ShaderResource,
                Usage = ResourceUsage.Dynamic,
                Height = image.Height,
                Width = image.Width
            };

            image.UnlockBits(data);
            image.Dispose();

            return new Texture2D(RenderForm11.Device, texDesc, dRect);
        }
예제 #2
0
 public D3D10.Texture2D AddToTexture2D(String name, D3D10.Texture2D file, int nr ,int maxTextures)
 {
     D3D10.Texture2D temp;
     if (textures.ContainsKey(name))
         temp = textures[name];
     else
     {
         D3D10.Texture2DDescription desc = new SlimDX.Direct3D10.Texture2DDescription();
         desc.ArraySize = maxTextures;
         desc.BindFlags = D3D10.BindFlags.ShaderResource;
         desc.CpuAccessFlags = D3D10.CpuAccessFlags.None;
         desc.Format = file.Description.Format;
         desc.Height = file.Description.Height;
         desc.Width = file.Description.Width;
         desc.MipLevels = file.Description.MipLevels;
         desc.OptionFlags = D3D10.ResourceOptionFlags.None;
         SlimDX.DXGI.SampleDescription sampleDesc = new SlimDX.DXGI.SampleDescription();
         sampleDesc.Count = 1;
         sampleDesc.Quality = 0;
         desc.SampleDescription = sampleDesc;
         desc.Usage = D3D10.ResourceUsage.Default;
         temp = new SlimDX.Direct3D10.Texture2D(Game.gameClass.GetDevice(), desc);
         textures.Add(name, temp);
     }
     D3D10.ResourceRegion region = new SlimDX.Direct3D10.ResourceRegion();
     region.Back = 1;
     region.Front = 0;
     region.Left = region.Top = 0;
     region.Right = file.Description.Width;
     region.Bottom = file.Description.Height;
     for (int i = 0, q = 1; i < file.Description.MipLevels; i++, q *= 2)
     {
         region.Right /= q;
         region.Bottom /= q;
         Game.gameClass.GetDevice().CopySubresourceRegion(file, i, region, temp, i + (nr * file.Description.MipLevels), 0, 0, 0);
     }
     return temp;
 }
예제 #3
0
파일: Sky.cs 프로젝트: rtshadow/miscs
        public Sky(Vector3 lightDir, StreamReader file)
        {
            ///
               // outerRadius = innerRadius * 1.0157313f;
               // atmScale = 1f / (outerRadius - innerRadius);

            dome.CreateDome((int)size.X, (int)size.Y);
               // waveLength4 = new Vector3((float)Math.Pow(waveLength.X, 4), (float)Math.Pow(waveLength.Y, 4), (float)Math.Pow(waveLength.Z, 4));
               // double pow = -0.84;
               // waveLength084 = new Vector3((float)Math.Pow(waveLength.X, pow), (float)Math.Pow(waveLength.Y, pow), (float)Math.Pow(waveLength.Z, pow));

            effect = ResourceManager.mainManager.LoadEffect("Resources\\Effects\\Sky.fx", ResourceManager.mainManager.GetDefaultEffectPool());
            pass = effect.GetTechniqueByName("Render").GetPassByIndex(0);
            updatePass = effect.GetTechniqueByName("Update").GetPassByIndex(0);
            D3D10.InputElement[] elements = new SlimDX.Direct3D10.InputElement[2];
                elements[0] = new SlimDX.Direct3D10.InputElement("POSITION", 0, SlimDX.DXGI.Format.R32G32B32_Float, 0, 0);
                elements[1] = new D3D10.InputElement("TEXCOORD", 0, SlimDX.DXGI.Format.R32G32_Float, 12, 0);
                layout = new SlimDX.Direct3D10.InputLayout(Game.gameClass.GetDevice(), elements, pass.Description.Signature);
                layoutUpdate = Quad.GetLayout(updatePass);
            translation = effect.GetVariableByName("translation").AsVector();
            sunPosition = effect.GetVariableByName("sunPos").AsVector();
               // Vector4 mieTemps = new Vector4((3 * (1 - g * g)) / (2 * (2 + g * g)), 1 + g * g, g, 1);
            mieTemps = effect.GetVariableByName("mieTemps").AsVector();
            K = effect.GetVariableByName("K").AsVector();
            waveLengthRay = effect.GetVariableByName("waveLengthRay").AsVector();
            waveLengthMie = effect.GetVariableByName("waveLengthMie").AsVector();
            scaleDepth = effect.GetVariableByName("scaleDepth").AsVector();
            sunIntensity = effect.GetVariableByName("sunIntensity").AsScalar();
            //textures
            D3D10.Texture2DDescription desc = new SlimDX.Direct3D10.Texture2DDescription();
            desc.ArraySize = 1;
            desc.BindFlags = D3D10.BindFlags.ShaderResource | SlimDX.Direct3D10.BindFlags.RenderTarget;
            desc.CpuAccessFlags = D3D10.CpuAccessFlags.None;
            desc.Format = SlimDX.DXGI.Format.R16G16B16A16_Float;
            desc.Height = (int)size.Y;
            desc.MipLevels = 1;
            desc.OptionFlags = D3D10.ResourceOptionFlags.None;
            desc.Usage = D3D10.ResourceUsage.Default;
            desc.Width = (int)size.X;

            SlimDX.DXGI.SampleDescription sampleDescription = new SlimDX.DXGI.SampleDescription();
            sampleDescription.Count = 1;
            sampleDescription.Quality = 0;
            desc.SampleDescription = sampleDescription;

            rayLookupTexture = new D3D10.Texture2D(Game.gameClass.GetDevice(), desc);
            mieLookupTexture = new D3D10.Texture2D(Game.gameClass.GetDevice(), desc);

               /* desc.BindFlags = D3D10.BindFlags.None;
            desc.CpuAccessFlags = D3D10.CpuAccessFlags.Write;
            desc.Usage = D3D10.ResourceUsage.Staging;

            mieUpdateTexture = new D3D10.Texture2D(Game.gameClass.GetDevice(), desc);
            rayUpdateTexture = new D3D10.Texture2D(Game.gameClass.GetDevice(), desc);

            mieUpdateTextureMap = mieUpdateTexture.Map(0, D3D10.MapMode.Write, D3D10.MapFlags.DoNotWait);
            mieUpdateTexture.Unmap(0);

            rayUpdateTextureMap = rayUpdateTexture.Map(0, D3D10.MapMode.Write, D3D10.MapFlags.DoNotWait);
            rayUpdateTexture.Unmap(0);*/
            using (D3D10.ShaderResourceView view = new SlimDX.Direct3D10.ShaderResourceView(Game.gameClass.GetDevice(), rayLookupTexture))
                effect.GetVariableByName("rayLookupTex").AsResource().SetResource(view);
             using (D3D10.ShaderResourceView view = new SlimDX.Direct3D10.ShaderResourceView(Game.gameClass.GetDevice(), mieLookupTexture))
                effect.GetVariableByName("mieLookupTex").AsResource().SetResource(view);

             viewPort = new Viewport();
             viewPort.Height = (int)size.Y;
             viewPort.Width = (int)size.X;
             viewPort.MaxZ = 1.0f;
             viewPort.MinZ = 0.0f;
             viewPort.X = 0;
             viewPort.Y = 0;

             renderTargets[0] = new SlimDX.Direct3D10.RenderTargetView(Game.gameClass.GetDevice(), rayLookupTexture);
             renderTargets[1] = new SlimDX.Direct3D10.RenderTargetView(Game.gameClass.GetDevice(), mieLookupTexture);

             Load(file);

             CalculateLookupOnGPU(-lightDir);
        }
예제 #4
0
파일: Terrain.cs 프로젝트: rtshadow/miscs
        //creation functions
        public Terrain(int q, StreamReader file)
        {
            quadSize = q;
            //loading effect
            effect = ResourceManager.mainManager.LoadEffect("Resources\\Effects\\Terrain.fx", ResourceManager.mainManager.GetDefaultEffectPool());
            technique = effect.GetTechniqueByName("Render");
            pass = technique.GetPassByIndex(0);
            //creating layout
            D3D10.InputElement[] elements = new SlimDX.Direct3D10.InputElement[1];
            elements[0] = new SlimDX.Direct3D10.InputElement("TEXCOORD", 0, SlimDX.DXGI.Format.R32G32_Float, 0, 0, D3D10.InputClassification.PerVertexData, 0);
            layout = new SlimDX.Direct3D10.InputLayout(Game.gameClass.GetDevice(), elements, pass.Description.Signature);

            //loading texture
            D3D10.ImageLoadInformation load = new SlimDX.Direct3D10.ImageLoadInformation();
            load.BindFlags = D3D10.BindFlags.ShaderResource;
            load.CpuAccessFlags = D3D10.CpuAccessFlags.None;
            load.MipLevels = 1;
            load.Usage=D3D10.ResourceUsage.Default;
            load.OptionFlags = D3D10.ResourceOptionFlags.None;
            load.FilterFlags = D3D10.FilterFlags.Point;
            load.Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm;
            normalTexture = D3D10.Texture2D.FromFile(Game.gameClass.GetDevice(), Path.GetDirectoryName(Game.gameClass.GetLvLFilePath()) + "\\normals.png", load);
            Globals.mapSize = normalTexture.Description.Width;

            if (Game.gameClass.GetEngineState() != EngineState.play)
            {
                D3D10.Texture2DDescription desc = new SlimDX.Direct3D10.Texture2DDescription();
                desc.ArraySize = 1;
                desc.BindFlags = D3D10.BindFlags.None;
                desc.CpuAccessFlags = D3D10.CpuAccessFlags.Write;
                desc.Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm;
                desc.Height = Globals.mapSize;
                desc.Width = Globals.mapSize;
                desc.Usage = D3D10.ResourceUsage.Staging;
                desc.MipLevels = 1;
                SlimDX.DXGI.SampleDescription sampleDescription = new SlimDX.DXGI.SampleDescription();
                sampleDescription.Count = 1;
                sampleDescription.Quality = 0;
                desc.SampleDescription = sampleDescription;
                normalTexUpdater = new SlimDX.Direct3D10.Texture2D(Game.gameClass.GetDevice(), desc);
                normalData = normalTexUpdater.Map(0, D3D10.MapMode.Write, D3D10.MapFlags.DoNotWait);
                normalTexUpdater.Unmap(0);
            }

               // LoadTextureArray(file);
            //setting up vertices and creating vertex buffer
            LoadVertexInfo();
            CreateVertexBuffer();

            //constant buffer variables
            effect.GetVariableByName("mapSize").AsScalar().Set(Globals.mapSize);
            using(D3D10.ShaderResourceView normalView=new D3D10.ShaderResourceView(Game.gameClass.GetDevice(),normalTexture))
                effect.GetVariableByName("normalMap").AsResource().SetResource(normalView);
              //  using (D3D10.ShaderResourceView texturesView = new D3D10.ShaderResourceView(Game.gameClass.GetDevice(), textures))
            //    effect.GetVariableByName("textures").AsResource().SetResource(texturesView);

            orientations=effect.GetVariableByName("orientations").AsVector();
               // effect.GetVariableByName("texCoordMul").AsScalar().Set(TextureInfo.texCoordMul);
            heightMul = effect.GetVariableByName("heightMul").AsScalar();
            heightMul.Set(Globals.heightMultiplier);

            //handles edit mode
            if (Game.gameClass.GetEngineState() != EngineState.play)
            {
                techniqueEdit = effect.GetTechniqueByName("Edit");
                passEdit = techniqueEdit.GetPassByIndex(0);
                mousePick = effect.GetVariableByName("mousePick").AsVector();
                pickOptions = effect.GetVariableByName("pickOpt").AsVector();
            }
            Globals.SetMap(map);
        }