Пример #1
0
        public void Apply(ObjectMesh objectMesh)
        {
            CameraConstant.Set(Camera); LightDirectionConstant.Set(LightDirection); LightDirection2Constant.Set(LightDirection2); LightColorConstant.Set(LightColor); LightColor2Constant.Set(LightColor2);
            ApplyInstanceContants(objectMesh);

            Shader.Apply();
        }
Пример #2
0
 public void Apply()
 {
     ApplyGlobalContants();
     ApplyInstanceContants();
     ApplyInstancingContants();
     Shader.Apply();
 }
Пример #3
0
        public void Apply(InstanceObjectMesh instanceObjectMesh)
        {
            CameraConstant.Set(Camera);
            ApplyInstanceContants(instanceObjectMesh);

            Shader.Apply();
        }
Пример #4
0
        public unsafe void Flush()
        {
            if (buffer.Size == 0)
            {
                return;
            }

            primitiveShader.Apply();
            primitiveShader.SetUniform("mvp", camera.ViewProjection);

            glDrawElements(mode, buffer.Flush(), GL_UNSIGNED_SHORT, null);
        }
Пример #5
0
        public void Draw(Shader shader)
        {
            shader.Apply(InputLayout);

            Device.NativeDeviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleList;
            Device.NativeDeviceContext.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(VertexBuffer, Stride, 0));
            Device.NativeDeviceContext.InputAssembler.SetIndexBuffer(IndexBuffer, Format.R32_UInt, 0);

            foreach (var segment in Segments)
            {
                shader.Prepare(this, segment);
                Device.NativeDeviceContext.DrawIndexed(segment.Count * 3, segment.Offset * 3, 0);
            }
        }
Пример #6
0
        public unsafe void Flush()
        {
            if (buffer.Size == 0)
            {
                return;
            }

            shader.Apply();
            shader.SetUniform("mvp", camera.ViewProjection);

            glDrawElements(mode, buffer.Flush(), GL_UNSIGNED_SHORT, null);

            Statistics.Increment(RenderKeys.DrawCalls);
        }
Пример #7
0
        public void DrawTargets()
        {
            modelTarget.Apply();

            // Note that by this point, the scene's shadow map should have already been computed.
            var renderer = Scene.Renderer;

            renderer.VpMatrix = viewOrientation;
            renderer.Draw();

            shader.Apply();
            Sky.Target.Bind(0);
            modelTarget.Bind(1);
        }
Пример #8
0
        public override void Draw()
        {
            base.Draw();

            GraphicsDevice.Debug.PushGroup("Test");

            GraphicsDevice.Clear(Color.Black);
            GraphicsDevice.Debug.Marker("Binding Mesh");
            GraphicsDevice.BindBuffer(vertexBuffer);
            GraphicsDevice.BindBuffer(indexBuffer);
            Shader.Apply();
            GraphicsDevice.DrawIndexed(indexBuffer.Size, 1, 0, 0, 0);

            GraphicsDevice.Debug.PopGroup();
        }
        protected override void CustomRender()
        {
            Matrix viewProj = Matrix.Multiply(mView, mProj);

            mDeviceContext.ClearDepthStencilView(mDepthView, DepthStencilClearFlags.Depth, 1.0f, 0);
            mDeviceContext.ClearRenderTargetView(mRenderView, Color.Black);

            float  currentTime   = mClock.ElapsedMilliseconds / 1000.0f;
            Matrix worldViewProj = Matrix.RotationX(currentTime) * Matrix.RotationY(currentTime * 2.0f) * Matrix.RotationZ(currentTime * 0.7f) * viewProj;

            worldViewProj.Transpose();

            mShader.SetShaderParam(mDevice, worldViewProj, Vector3.Zero, Vector4.Zero, Vector4.Zero);
            mShader.Apply(mDevice);

            mCube.Draw(mDevice);
        }
Пример #10
0
        public void Draw(Camera3D camera)
        {
            glEnable(GL_CULL_FACE);
            glCullFace(GL_BACK);
            glActiveTexture(GL_TEXTURE0);
            glBindTexture(GL_TEXTURE_2D, shadowMapTarget.Id);
            glActiveTexture(GL_TEXTURE1);
            glBindTexture(GL_TEXTURE_2D, defaultTexture.Id);

            mat4[] bones =
            {
                bone1,
                bone2
            };

            skeletalShader.Apply();
            skeletalShader.SetUniform("lightDirection", lightDirection);
            skeletalShader.SetUniform("lightColor", Color.White.ToVec3());
            skeletalShader.SetUniform("ambientIntensity", 0.1f);
            skeletalShader.SetUniform("bones[0]", bones);

            // See http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/.
            mat4 biasMatrix = new mat4
                              (
                0.5f, 0.0f, 0.0f, 0,
                0.0f, 0.5f, 0.0f, 0,
                0.0f, 0.0f, 0.5f, 0,
                0.5f, 0.5f, 0.5f, 1
                              );

            mat4 cameraMatrix = camera.ViewProjection;
            mat4 world        = model.WorldMatrix;
            quat orientation  = model.Orientation;

            skeletalShader.SetUniform("orientation", orientation.ToMat4);
            skeletalShader.SetUniform("mvp", cameraMatrix * world);
            skeletalShader.SetUniform("lightBiasMatrix", biasMatrix * lightMatrix * world);

            Draw(model.Mesh);
        }
Пример #11
0
        public void Draw(Camera3D camera)
        {
            glEnable(GL_CULL_FACE);
            glCullFace(GL_BACK);
            glActiveTexture(GL_TEXTURE0);
            glBindTexture(GL_TEXTURE_2D, shadowMapTarget.Id);
            glActiveTexture(GL_TEXTURE1);
            glBindTexture(GL_TEXTURE_2D, defaultTexture.Id);

            modelShader.Apply();
            modelShader.SetUniform("lightDirection", LightDirection);
            modelShader.SetUniform("lightColor", LightColor.ToVec3());
            modelShader.SetUniform("ambientIntensity", AmbientIntensity);

            // See http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-16-shadow-mapping/.
            mat4 biasMatrix = new mat4
                              (
                0.5f, 0.0f, 0.0f, 0,
                0.0f, 0.5f, 0.0f, 0,
                0.0f, 0.0f, 0.5f, 0,
                0.5f, 0.5f, 0.5f, 1
                              );

            mat4 cameraMatrix = camera.ViewProjection;

            foreach (ModelHandle handle in handles)
            {
                Model model       = handle.Model;
                mat4  world       = model.WorldMatrix;
                quat  orientation = model.Orientation;

                modelShader.SetUniform("orientation", orientation.ToMat4);
                modelShader.SetUniform("mvp", cameraMatrix * world);
                modelShader.SetUniform("lightBiasMatrix", biasMatrix * lightMatrix * world);

                Draw(handle);
            }
        }
Пример #12
0
        public void DrawTargets()
        {
            const int OrthoSize = 8;

            glDisable(GL_CULL_FACE);

            mat4 lightView       = mat4.LookAt(-LightDirection * 10, vec3.Zero, vec3.UnitY);
            mat4 lightProjection = mat4.Ortho(-OrthoSize, OrthoSize, -OrthoSize, OrthoSize, 0.1f, 100);

            lightMatrix = lightProjection * lightView;

            shadowMapTarget.Apply();
            shadowMapShader.Apply();

            foreach (ModelHandle handle in handles)
            {
                Model model = handle.Model;

                model.RecomputeWorldMatrix();
                shadowMapShader.SetUniform("lightMatrix", lightMatrix * model.WorldMatrix);
                Draw(handle);
            }
        }
Пример #13
0
 async void beginexecblock()
 {
     if ((await Windows.Storage.ApplicationData.Current.RoamingFolder.GetFilesAsync()).Count == 0)
     {
         await ApplicationData.Current.RoamingFolder.CreateFileAsync("testfile.txt");
         ApplicationData.Current.SignalDataChanged();
         Windows.UI.Popups.MessageDialog tdlg = new Windows.UI.Popups.MessageDialog("Roaming file creation success", "Sync status");
         await tdlg.ShowAsync();
     }
     try
     {
         DateTime started = DateTime.Now;
         RenderContext mtext = new RenderContext();
         maincontext = mtext;
         StorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;
         StorageFile file = await folder.GetFileAsync("DXInteropLib\\VertexShader.cso");
         
         var stream = (await file.OpenAsync(FileAccessMode.Read));
         Windows.Storage.Streams.DataReader mreader = new Windows.Storage.Streams.DataReader(stream.GetInputStreamAt(0));
         byte[] dgram = new byte[file.Size];
         await mreader.LoadAsync((uint)dgram.Length);
         mreader.ReadBytes(dgram);
         file = await folder.GetFileAsync("DXInteropLib\\PixelShader.cso");
         stream = await file.OpenAsync(FileAccessMode.Read);
         mreader = new Windows.Storage.Streams.DataReader(stream.GetInputStreamAt(0));
         byte[] mgram = new byte[file.Size];
         await mreader.LoadAsync((uint)file.Size);
         mreader.ReadBytes(mgram);
         try
         {
             defaultshader = mtext.CreateShader(dgram, mgram);
             mtext.InitializeLayout(dgram);
             defaultshader.Apply();
             mtext.OnRenderFrame += onrenderframe;
         }
         catch (Exception er)
         {
             Windows.UI.Popups.MessageDialog mdlg = new Windows.UI.Popups.MessageDialog(er.ToString(),"Fatal error");
             mdlg.ShowAsync().Start();
         }
         IStorageFile[] files = (await folder.GetFilesAsync()).ToArray();
         bool founddata = false;
         foreach (IStorageFile et in files)
         {
             if (et.FileName.Contains("rawimage.dat"))
             {
                 stream = await et.OpenAsync(FileAccessMode.Read);
                 founddata = true;
             }
         }
         int width;
         int height;
         byte[] rawdata;
         if (!founddata)
         {
             file = await folder.GetFileAsync("TestProgram\\test.png");
             stream = await file.OpenAsync(FileAccessMode.Read);
             var decoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(stream);
             var pixeldata = await decoder.GetPixelDataAsync(Windows.Graphics.Imaging.BitmapPixelFormat.Rgba8, Windows.Graphics.Imaging.BitmapAlphaMode.Straight, new Windows.Graphics.Imaging.BitmapTransform(), Windows.Graphics.Imaging.ExifOrientationMode.IgnoreExifOrientation, Windows.Graphics.Imaging.ColorManagementMode.DoNotColorManage);
             width = (int)decoder.PixelWidth;
             height = (int)decoder.PixelHeight;
             rawdata = pixeldata.DetachPixelData();
             file = await folder.CreateFileAsync("rawimage.dat");
             stream = (await file.OpenAsync(FileAccessMode.ReadWrite));
             var realstream = stream.GetOutputStreamAt(0);
             DataWriter mwriter = new DataWriter(realstream);
             mwriter.WriteInt32(width);
             mwriter.WriteInt32(height);
             mwriter.WriteBytes(rawdata);
             await mwriter.StoreAsync();
             await realstream.FlushAsync();
             
             
             
         }
         else
         {
             DataReader treader = new DataReader(stream.GetInputStreamAt(0));
             await treader.LoadAsync((uint)stream.Size);
             rawdata = new byte[stream.Size-(sizeof(int)*2)];
             width = treader.ReadInt32();
             height = treader.ReadInt32();
             treader.ReadBytes(rawdata);
         }
         Texture2D mtex = maincontext.createTexture2D(rawdata, width, height);
         List<VertexPositionNormalTexture> triangle = new List<VertexPositionNormalTexture>();
         triangle.Add(new VertexPositionNormalTexture(new Vector3(-.5f,-.5f,0),new Vector3(1,1,1),new Vector2(0,0)));
         triangle.Add(new VertexPositionNormalTexture(new Vector3(0,0.5f,0),new Vector3(1,1,1),new Vector2(1,0)));
         triangle.Add(new VertexPositionNormalTexture(new Vector3(.5f,-0.5f,0),new Vector3(1,1,1),new Vector2(1,1)));
         byte[] gpudata = VertexPositionNormalTexture.Serialize(triangle.ToArray());
         
         VertexBuffer mbuffer = maincontext.createVertexBuffer(gpudata,VertexPositionNormalTexture.Size);
         mbuffer.Apply(VertexPositionNormalTexture.Size);
         vertcount = 3;
         Windows.UI.Popups.MessageDialog tdlg = new Windows.UI.Popups.MessageDialog("Unit tests successfully completed\nShader creation: Success\nTexture load: Success\nVertex buffer creation: Success\nTime:"+(DateTime.Now-started).ToString(), "Results");
         tdlg.ShowAsync().Start();
     }
     catch (Exception er)
     {
         Windows.UI.Popups.MessageDialog tdlg = new Windows.UI.Popups.MessageDialog(er.ToString(), "Fatal error");
         tdlg.ShowAsync().Start();
     }
 }