예제 #1
0
        internal VertexShader(SlimDX.Direct3D11.InputLayout inputLayout, SlimDX.Direct3D11.VertexShader vertexShader)
        {
            #if ASSERT
            if (inputLayout == null)
            {
                throw new ArgumentNullException("inputLayout");
            }

            if (vertexShader == null)
            {
                throw new ArgumentNullException("vertexShader");
            }
            #endif

            this.inputLayout = inputLayout;
            resourceOwner = false;
            this.vertexShader = vertexShader;
            uniqueId = new UniqueId<VertexShader>();
        }
예제 #2
0
        internal VertexShader(SlimDX.Direct3D11.Device device, IEnumerable<SlimDX.Direct3D11.InputElement> inputElements, SlimDX.D3DCompiler.ShaderBytecode vertexShaderCode)
        {
            #if ASSERT
            if (device == null)
            {
                throw new ArgumentNullException("device");
            }

            if (inputElements == null)
            {
                throw new ArgumentNullException("inputElements");
            }

            if (vertexShaderCode == null)
            {
                throw new ArgumentNullException("vertexShaderCode");
            }
            #endif

            resourceOwner = true;
            vertexShader = new SlimDX.Direct3D11.VertexShader(device, vertexShaderCode);
            inputLayout = new SlimDX.Direct3D11.InputLayout(device, vertexShaderCode, inputElements.ToArray());
            uniqueId = new UniqueId<VertexShader>();
        }
예제 #3
0
        internal VertexShader(SlimDX.Direct3D11.Device device, IEnumerable<SlimDX.Direct3D11.InputElement> inputElements, string shaderCode, string entryPoint, SlimDX.D3DCompiler.ShaderFlags shaderFlags)
        {
            #if ASSERT
            if (device == null)
            {
                throw new ArgumentNullException("device");
            }

            if (inputElements == null)
            {
                throw new ArgumentNullException("inputElements");
            }

            if (shaderCode == null)
            {
                throw new ArgumentNullException("shaderCode");
            }

            if (shaderCode.Length == 0)
            {
                throw new ArgumentOutOfRangeException("shaderCode");
            }

            if (entryPoint == null)
            {
                throw new ArgumentNullException("entryPoint");
            }

            if (entryPoint.Length == 0)
            {
                throw new ArgumentOutOfRangeException("entryPoint");
            }
            #endif

            resourceOwner = true;
            uniqueId = new UniqueId<VertexShader>();

            using (var vertexShaderCode = SlimDX.D3DCompiler.ShaderBytecode.Compile(shaderCode, entryPoint, "vs_5_0", shaderFlags, SlimDX.D3DCompiler.EffectFlags.None))
            {
                vertexShader = new SlimDX.Direct3D11.VertexShader(device, vertexShaderCode);
                inputLayout = new SlimDX.Direct3D11.InputLayout(device, vertexShaderCode, inputElements.ToArray());
            }
        }
예제 #4
0
        public void Dispose()
        {
            if (resourceOwner)
            {
                if (inputLayout != null)
                {
                    inputLayout.Dispose();
                }

                if (vertexShader != null)
                {
                    vertexShader.Dispose();
                }
            }

            inputLayout = null;
            vertexShader = null;
        }
예제 #5
0
		public override void Render()
		{
			SlimDX.Direct3D11.DepthStencilState oldDSState = DeviceManager.Instance.context.OutputMerger.DepthStencilState;
			SlimDX.Direct3D11.BlendState oldBlendState = DeviceManager.Instance.context.OutputMerger.BlendState;
			SlimDX.Direct3D11.RasterizerState oldRasterizerState = DeviceManager.Instance.context.Rasterizer.State;
			SlimDX.Direct3D11.VertexShader oldVertexShader = DeviceManager.Instance.context.VertexShader.Get();
			SlimDX.Direct3D11.Buffer[] oldVSCBuffers = DeviceManager.Instance.context.VertexShader.GetConstantBuffers(0, 10);
			SlimDX.Direct3D11.PixelShader oldPixelShader = DeviceManager.Instance.context.PixelShader.Get();
			SlimDX.Direct3D11.Buffer[] oldPSCBuffers = DeviceManager.Instance.context.PixelShader.GetConstantBuffers(0, 10);
			SlimDX.Direct3D11.ShaderResourceView[] oldShaderResources = DeviceManager.Instance.context.PixelShader.GetShaderResources(0, 10);
			SlimDX.Direct3D11.GeometryShader oldGeometryShader = DeviceManager.Instance.context.GeometryShader.Get();

			base.Render();

			DeviceManager.Instance.context.OutputMerger.DepthStencilState = oldDSState;
			DeviceManager.Instance.context.OutputMerger.BlendState = oldBlendState;
			DeviceManager.Instance.context.Rasterizer.State = oldRasterizerState;
			DeviceManager.Instance.context.VertexShader.Set(oldVertexShader);
			DeviceManager.Instance.context.VertexShader.SetConstantBuffers(oldVSCBuffers, 0, 10);
			DeviceManager.Instance.context.PixelShader.Set(oldPixelShader);
			DeviceManager.Instance.context.PixelShader.SetConstantBuffers(oldPSCBuffers, 0, 10);
			DeviceManager.Instance.context.PixelShader.SetShaderResources(oldShaderResources, 0, 10);
			DeviceManager.Instance.context.GeometryShader.Set(oldGeometryShader);

			foreach (RenderInstance instance in _renderInstances)
			{
				if (instance.Name == null)
				{
					continue;
				}

				SlimDX.Matrix world = instance.Transform;
				SlimDX.Matrix view = CameraManager.Instance.frameCamera.View;
				SlimDX.Matrix projection = CameraManager.Instance.frameCamera.Perspective;

				//SlimDX.Matrix viewProj = view * projection;
				SlimDX.Matrix worldViewProjection = world * view * projection;
				SlimDX.Direct3D11.Viewport vp = DeviceManager.Instance.context.Rasterizer.GetViewports()[0];
				SlimDX.Vector3 position3D = SlimDX.Vector3.Project(SlimDX.Vector3.Zero, vp.X, vp.Y, vp.Width, vp.Height, vp.MinZ, vp.MaxZ, worldViewProjection);
				SlimDX.Vector2 position2D = new SlimDX.Vector2(position3D.X, position3D.Y);

				if (position3D.Z < vp.MaxZ)
				{
					SlimDX.Vector3 objPos = SlimDX.Vector3.Zero;
					objPos = SlimDX.Vector3.TransformCoordinate(objPos, instance.Transform);
					SlimDX.Vector3 camPos = CameraManager.Instance.frameCamera.eye;
					SlimDX.Vector3 objOffset = objPos - camPos;
					float scale = Math.Min(2.0f, 5.0f / (float)Math.Sqrt(Math.Max(1.0f, objOffset.Length())));

					RenderManager.Instance.DrawString(instance.Name, position2D, 16 * scale, new SlimDX.Color4(1.0f, 1.0f, 1.0f));
				}
			}

			DeviceManager.Instance.context.OutputMerger.DepthStencilState = oldDSState;
			DeviceManager.Instance.context.OutputMerger.BlendState = oldBlendState;
			DeviceManager.Instance.context.Rasterizer.State = oldRasterizerState;
			DeviceManager.Instance.context.VertexShader.Set(oldVertexShader);
			DeviceManager.Instance.context.VertexShader.SetConstantBuffers(oldVSCBuffers, 0, 10);
			DeviceManager.Instance.context.PixelShader.Set(oldPixelShader);
			DeviceManager.Instance.context.PixelShader.SetConstantBuffers(oldPSCBuffers, 0, 10);
			DeviceManager.Instance.context.PixelShader.SetShaderResources(oldShaderResources, 0, 10);
			DeviceManager.Instance.context.GeometryShader.Set(oldGeometryShader);
		}