Ejemplo n.º 1
0
        public void SetMouseCursorVisibility(bool visible, bool changePosition = true)
        {
            if (m_oldMouseVisibilityState && visible != m_oldMouseVisibilityState)
            {
                //VRage.Trace.Trace.SendMsgLastCall(p.ToString());
                //VRage.Trace.Trace.SendMsgLastCall(m_oldNonVisPos.ToString());
                //VRage.Trace.Trace.SendMsgLastCall(m_oldVisPos.ToString());

                m_oldVisPos = MyInput.Static.GetMousePosition();
                m_oldMouseVisibilityState = visible;
                //m_oldNonVisPos = new Vector2(MySandboxGame.ScreenSizeHalf.X, MySandboxGame.ScreenSizeHalf.Y);

                // if (changePosition)
                //   MyGuiInput.SetMousePosition((int)m_oldNonVisPos.X, (int)m_oldNonVisPos.Y);
                //MyGuiInput.SetMouseToScreenCenter();
            }

            if (!m_oldMouseVisibilityState && visible != m_oldMouseVisibilityState)
            {
                //VRage.Trace.Trace.SendMsgLastCall(p.ToString());
                //VRage.Trace.Trace.SendMsgLastCall(m_oldNonVisPos.ToString());
                //VRage.Trace.Trace.SendMsgLastCall(m_oldVisPos.ToString());

                m_oldNonVisPos = MyInput.Static.GetMousePosition();
                m_oldMouseVisibilityState = visible;

                if (changePosition)
                    MyInput.Static.SetMousePosition((int)m_oldVisPos.X, (int)m_oldVisPos.Y);
            }
            MySandboxGame.Static.SetMouseVisible(visible);
        }
 internal void AddSprite(Vector2 clipOffset, Vector2 clipScale, Vector2 texOffset, Vector2 texScale, Byte4 color)
 {
     MySpritesRenderer.m_spriteInstanceList.Add(new MyVertexFormatSpritePositionTextureColor(
         new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y),
         new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y),
         color));
 }
Ejemplo n.º 3
0
 internal void AddSprite(Vector2 clipOffset, Vector2 clipScale, Vector2 texOffset, Vector2 texScale, 
     Vector2 origin, Vector2 tangent, Byte4 color)
 {
     MySpritesRenderer.StackTop().m_instances.Add(new MyVertexFormatSpritePositionTextureRotationColor(
         new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y),
         new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y),
         new HalfVector4(origin.X, origin.Y, tangent.X, tangent.Y),
         color));
 }
Ejemplo n.º 4
0
        private static void InitInternal(Vector2[] vertsForMask)
        {
            m_VB = MyHwBuffers.CreateVertexBuffer(vertsForMask.Length, MyVertexFormat2DPosition.STRIDE, BindFlags.VertexBuffer, ResourceUsage.Dynamic, null, "MyStereoStencilMask.VB");
            MyMapping mapping = MyMapping.MapDiscard(RC, m_VB.Buffer);
            mapping.WriteAndPosition(vertsForMask, 0, vertsForMask.Length);
            mapping.Unmap();

            m_vs = MyShaders.CreateVs("Stereo/StereoStencilMask.hlsl");
            m_ps = MyShaders.CreatePs("Stereo/StereoStencilMask.hlsl");

            m_il = MyShaders.CreateIL(m_vs.BytecodeId, MyVertexLayouts.GetLayout(MyVertexInputComponentType.POSITION2));
        }
Ejemplo n.º 5
0
        public MyScreenshot(VRageMath.Vector2 sizeMultiplier, string saveToPath, bool ignoreSprites, bool showNotification)
        {
            MyRender.Log.WriteLine("MyScreenshot.Constructor() - START");
            MyRender.Log.IncreaseIndent();

            System.Diagnostics.Debug.Assert(sizeMultiplier.X > 0 && sizeMultiplier.Y > 0);
            m_sizeMultiplier = sizeMultiplier;
            IgnoreSprites = ignoreSprites;
            ShowNotification = showNotification;

            m_fullPathToSave = saveToPath;
            m_datetimePrefix = MyValueFormatter.GetFormatedDateTimeForFilename(DateTime.Now);

            MyRender.Log.DecreaseIndent();
            MyRender.Log.WriteLine("MyScreenshot.Constructor() - END");
        }
        internal static void AddSingleSprite(string textureStr, Color color, Vector2 origin, Rectangle? sourceRect, RectangleF destinationRect)
        {
            Vector2 clipOffset;
            Vector2 clipScale;

            CalculateSpriteClipspace(destinationRect,
                MyRender.ViewportResolution,
                out clipOffset, out clipScale);

            var texture = MyTextureManager.GetTexture(textureStr);

            AddSingleSprite(texture, new MyVertexFormatSpritePositionTextureColor(
                new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y),
                new HalfVector4(0, 0, 1, 1),
                new Byte4(color.R, color.G, color.B, color.A)));
        }
Ejemplo n.º 7
0
        internal static void AddSingleSprite(ShaderResourceView view, Vector2 textureSize, Color color, Vector2 origin, Vector2 tangent, Rectangle?sourceRect, RectangleF destinationRect)
        {
            if (StackTop().m_internalBatch.ScissorRectangle.HasValue)
            {
                RectangleF intersection;
                var        scissor = StackTop().m_internalBatch.ScissorRectangle.Value;
                RectangleF.Intersect(ref scissor, ref destinationRect, out intersection);
                if (intersection.Size.X * intersection.Size.Y == 0)
                {
                    return;
                }
            }

            Vector2 clipOffset;

            Vector2 targetResolution = StackTop().m_resolution ?? MyRender11.ResolutionF;

            clipOffset   = destinationRect.Position / targetResolution * 2 - 1;
            clipOffset.Y = -clipOffset.Y;

            Vector2 texOffset = Vector2.Zero;
            Vector2 texScale  = Vector2.One;

            Vector2 originOffset;

            if (sourceRect != null)
            {
                Vector2 leftTop = new Vector2(sourceRect.Value.Left, sourceRect.Value.Top);
                Vector2 size    = new Vector2(sourceRect.Value.Width, sourceRect.Value.Height);
                texOffset = leftTop / textureSize;
                texScale  = size / textureSize;

                originOffset    = origin / new Vector2(sourceRect.Value.Width, sourceRect.Value.Height) - 0.5f;
                originOffset.Y *= -1;
            }
            else
            {
                originOffset    = origin / textureSize - 0.5f;
                originOffset.Y *= -1;
            }

            AddSingleSprite(view, new MyVertexFormatSpritePositionTextureRotationColor(
                                new HalfVector4(clipOffset.X, clipOffset.Y, destinationRect.Width, destinationRect.Height),
                                new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y),
                                new HalfVector4(originOffset.X, originOffset.Y, tangent.X, tangent.Y),
                                new Byte4(color.R, color.G, color.B, color.A)));
        }
Ejemplo n.º 8
0
        public void TakeScreenshot(string saveToPath = null, bool ignoreSprites = false, Vector2?sizeMultiplier = null, bool showNotification = true)
        {
            //  Screenshot object survives only one DRAW after created. We delete it immediatelly. So if 'm_screenshot'
            //  is not null we know we have to take screenshot and set it to null.

            //if (m_screenshot != null)
            //    return;

            if (!sizeMultiplier.HasValue)
            {
                sizeMultiplier = new Vector2(MySandboxGame.Config.ScreenshotSizeMultiplier);
            }

            //var screenshot = new MyScreenShot(sizeMultiplier.Value, saveToPath, ignoreSprites, showNotification);

            VRageRender.MyRenderProxy.TakeScreenshot(sizeMultiplier.Value, saveToPath, false, ignoreSprites, showNotification);
        }
        private static Vector2[] GetUndefinedMask()
        {
            // this offset represents percent of the screen, that are not displayed in the OpenVR
            float   offset      = 0.17f;
            Vector2 topLeft     = new Vector2(-offset, 1);
            Vector2 topRight    = new Vector2(offset, 1);
            Vector2 bottomLeft  = new Vector2(-offset, -1);
            Vector2 bottomRight = new Vector2(offset, -1);

            Vector2[] verts = m_tmpInitUndefinedMaskVerts;
            verts[0] = topLeft;
            verts[1] = topRight;
            verts[2] = bottomLeft;
            verts[3] = bottomLeft;
            verts[4] = topRight;
            verts[5] = bottomRight;

            return(verts);
        }
Ejemplo n.º 10
0
        private static Vector2[] GetUndefinedMask()
        {
            // this offset represents percent of the screen, that are not displayed in the OpenVR
            float offset = 0.17f;
            Vector2 topLeft = new Vector2(-offset, 1);
            Vector2 topRight = new Vector2(offset, 1);
            Vector2 bottomLeft = new Vector2(-offset, -1);
            Vector2 bottomRight = new Vector2(offset, -1);

            Vector2[] verts = m_tmpInitUndefinedMaskVerts; 
            verts[0] = topLeft;
            verts[1] = topRight;
            verts[2] = bottomLeft;
            verts[3] = bottomLeft;
            verts[4] = topRight;
            verts[5] = bottomRight;

            return verts;
        }
Ejemplo n.º 11
0
        internal static void AddSingleSprite(MyTexture2D texture, Vector2 position, Rectangle?sourceRectangle, float scale, Color color)
        {
            Vector2 clipOffset;
            Vector2 clipScale;

            RectangleF destination;

            if (sourceRectangle != null)
            {
                destination = new RectangleF(position.X, position.Y, scale * sourceRectangle.Value.Width,
                                             scale * sourceRectangle.Value.Height);
            }
            else
            {
                destination = new RectangleF(position.X, position.Y, scale, scale);
            }

            CalculateSpriteClipspace(destination,
                                     MyRender.ViewportResolution,
                                     out clipOffset, out clipScale);

            Vector2 texOffset = Vector2.Zero;
            Vector2 texScale  = Vector2.One;

            if (sourceRectangle != null)
            {
                Vector2 textureSize = texture != null ? texture.Size : Vector2.Zero;

                Vector2 leftTop = new Vector2(sourceRectangle.Value.Left, sourceRectangle.Value.Top);
                Vector2 size    = new Vector2(sourceRectangle.Value.Width, sourceRectangle.Value.Height);
                texOffset = leftTop / textureSize;
                texScale  = size / textureSize;
            }

            AddSingleSprite(texture, new MyVertexFormatSpritePositionTextureColor(
                                new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y),
                                new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y),
                                new Byte4(color.R, color.G, color.B, color.A)));
        }
 internal static float DrawTextShadow(Vector2 screenCoord, StringBuilder text, VRageMath.Color color, float scale)
 {
     return MyRender.DebugFont.DrawString(
         screenCoord,
         color,
         text,
         scale);
 }
        internal static void CalculateSpriteClipspace(RectangleF destination, Vector2 screenSize, out Vector2 clipOffset, out Vector2 clipScale)
        {
            Vector2 scale = destination.Size / screenSize;
            Vector2 translation = destination.Position / screenSize;

            clipScale = scale * 2;
            clipOffset = translation * 2 - 1;
            clipOffset.Y = -clipOffset.Y;
            clipOffset += new Vector2(0.5f, -0.5f) * clipScale;
        }
        internal static void AddSingleSprite(MyTexture2D texture, Vector2 position, Rectangle? sourceRectangle, float scale, Color color)
        {
            Vector2 clipOffset;
            Vector2 clipScale;

            RectangleF destination;
            if (sourceRectangle != null)
            {
                destination = new RectangleF(position.X, position.Y, scale * sourceRectangle.Value.Width,
                    scale * sourceRectangle.Value.Height);
            }
            else
            {
                destination = new RectangleF(position.X, position.Y, scale, scale);
            }

            CalculateSpriteClipspace(destination,
                MyRender.ViewportResolution,
                out clipOffset, out clipScale);

            Vector2 texOffset = Vector2.Zero;
            Vector2 texScale = Vector2.One;

            if (sourceRectangle != null)
            {
                Vector2 textureSize = texture != null ? texture.Size : Vector2.Zero;

                Vector2 leftTop = new Vector2(sourceRectangle.Value.Left, sourceRectangle.Value.Top);
                Vector2 size = new Vector2(sourceRectangle.Value.Width, sourceRectangle.Value.Height);
                texOffset = leftTop / textureSize;
                texScale = size / textureSize;
            }

            AddSingleSprite(texture, new MyVertexFormatSpritePositionTextureColor(
                new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y),
                new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y),
                new Byte4(color.R, color.G, color.B, color.A)));
        }
Ejemplo n.º 15
0
        internal static float DrawText(Vector2 screenCoord, StringBuilder text, VRageMath.Color color, float scale, MyGuiDrawAlignEnum align = MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_TOP)
        {
            var font = MyRender11.DebugFont;

            return font.DrawString(
                MyUtils.GetCoordAligned(screenCoord, font.MeasureString(text, scale), align),
                color,
                text,
                scale);
        }
Ejemplo n.º 16
0
 internal static void AddSingleSprite(ISrvBindable tex, Color color, Vector2 origin, Vector2 tangent, Rectangle? sourceRect, RectangleF destinationRect)
 {
     AddSingleSprite(tex, tex.Size, color, origin, tangent, sourceRect, destinationRect);
 }
Ejemplo n.º 17
0
        internal static void AddSingleSprite(ShaderResourceView view, Vector2 textureSize, Color color, Vector2 origin, Vector2 tangent, Rectangle? sourceRect, RectangleF destinationRect)
        {
            if (StackTop().m_internalBatch.ScissorRectangle.HasValue)
            {
                RectangleF intersection;
                var scissor = StackTop().m_internalBatch.ScissorRectangle.Value;
                RectangleF.Intersect(ref scissor, ref destinationRect, out intersection);
                if (intersection.Size.X * intersection.Size.Y == 0)
                {
                    return;
                }
            }

            Vector2 clipOffset;

            Vector2 targetResolution = StackTop().m_resolution ?? MyRender11.ResolutionF;
            clipOffset = destinationRect.Position / targetResolution * 2 - 1;
            clipOffset.Y = -clipOffset.Y;

            Vector2 texOffset = Vector2.Zero;
            Vector2 texScale = Vector2.One;

            Vector2 originOffset;
            if (sourceRect != null)
            {
                Vector2 leftTop = new Vector2(sourceRect.Value.Left, sourceRect.Value.Top);
                Vector2 size = new Vector2(sourceRect.Value.Width, sourceRect.Value.Height);
                texOffset = leftTop / textureSize;
                texScale = size / textureSize;

                originOffset = origin / new Vector2(sourceRect.Value.Width, sourceRect.Value.Height) - 0.5f;
                originOffset.Y *= -1;
            }
            else
            {
                originOffset = origin / textureSize - 0.5f;
                originOffset.Y *= -1;
            }

            AddSingleSprite(view, new MyVertexFormatSpritePositionTextureRotationColor(
                new HalfVector4(clipOffset.X, clipOffset.Y, destinationRect.Width, destinationRect.Height),
                new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y),
                new HalfVector4(originOffset.X, originOffset.Y, tangent.X, tangent.Y),
                new Byte4(color.R, color.G, color.B, color.A)));
        }
Ejemplo n.º 18
0
        public void TakeScreenshot(string saveToPath = null, bool ignoreSprites = false, Vector2? sizeMultiplier = null, bool showNotification = true)
        {
            //  Screenshot object survives only one DRAW after created. We delete it immediatelly. So if 'm_screenshot'
            //  is not null we know we have to take screenshot and set it to null.

            //if (m_screenshot != null)
            //    return;

            if (!sizeMultiplier.HasValue)
                sizeMultiplier = new Vector2(MySandboxGame.Config.ScreenshotSizeMultiplier);

            //var screenshot = new MyScreenShot(sizeMultiplier.Value, saveToPath, ignoreSprites, showNotification);

            VRageRender.MyRenderProxy.TakeScreenshot(sizeMultiplier.Value, saveToPath, false, ignoreSprites, showNotification);
        }
Ejemplo n.º 19
0
 internal void AddSprite(Vector2 clipOffset, Vector2 clipScale, Vector2 texOffset, Vector2 texScale,
                         Vector2 origin, Vector2 tangent, Byte4 color)
 {
     MySpritesRenderer.StackTop().m_instances.Add(new MyVertexFormatSpritePositionTextureRotationColor(
                                                      new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y),
                                                      new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y),
                                                      new HalfVector4(origin.X, origin.Y, tangent.X, tangent.Y),
                                                      color));
 }
Ejemplo n.º 20
0
        //  Sends input (keyboard/mouse) to screen which has focus (top-most)
        public void HandleInputAfterSimulation()
        {
            if (MySession.Static != null)
            {
                bool cameraControllerMovementAllowed = MyScreenManager.GetScreenWithFocus() == MyGuiScreenGamePlay.Static && MyGuiScreenGamePlay.Static != null && !MyScreenManager.InputToNonFocusedScreens;
                bool lookAroundEnabled = MyInput.Static.IsGameControlPressed(MyControlsSpace.LOOKAROUND) || (MySession.Static.ControlledEntity != null && MySession.Static.ControlledEntity.PrimaryLookaround);

                //After respawn, the controlled object might be null
                bool shouldStopControlledObject = MySession.Static.ControlledEntity != null && (!cameraControllerMovementAllowed && m_cameraControllerMovementAllowed != cameraControllerMovementAllowed);

                bool movementAllowedInPause = MySession.Static.GetCameraControllerEnum() == MyCameraControllerEnum.Spectator ||
                                              MySession.Static.GetCameraControllerEnum() == MyCameraControllerEnum.SpectatorDelta ||
                                              MySession.Static.GetCameraControllerEnum() == MyCameraControllerEnum.SpectatorFixed;
                bool rotationAllowedInPause = movementAllowedInPause;   //GK: consider removing if in the future is not different from movementAllowed
                bool devScreenFlag          = MyScreenManager.GetScreenWithFocus() is MyGuiScreenDebugBase && !MyInput.Static.IsAnyAltKeyPressed();
                MyCameraControllerEnum cce  = MySession.Static.GetCameraControllerEnum();

                float             rollIndicator     = MyInput.Static.GetRoll();
                Vector2           rotationIndicator = MyInput.Static.GetRotation();
                VRageMath.Vector3 moveIndicator     = MyInput.Static.GetPositionDelta();

                var focusScreen = MyScreenManager.GetScreenWithFocus();

                if (MySandboxGame.IsPaused && focusScreen is MyGuiScreenGamePlay)
                {
                    if (!movementAllowedInPause && !rotationAllowedInPause)
                    {
                        return;
                    }

                    if (!movementAllowedInPause)
                    {
                        moveIndicator = VRageMath.Vector3.Zero;
                    }
                    if (!rotationAllowedInPause || devScreenFlag)
                    {
                        rollIndicator     = 0.0f;
                        rotationIndicator = Vector2.Zero;
                    }

                    MySession.Static.CameraController.Rotate(rotationIndicator, rollIndicator);
                }
                else if (lookAroundEnabled)
                {
                    if (cameraControllerMovementAllowed)
                    {
                        //Then move camera (because it can be dependent on control object)
                        MySession.Static.CameraController.Rotate(rotationIndicator, rollIndicator);

                        if (!m_lookAroundEnabled && shouldStopControlledObject)
                        {
                            MySession.Static.ControlledEntity.MoveAndRotateStopped();
                        }
                    }

                    if (shouldStopControlledObject)
                    {
                        MySession.Static.CameraController.RotateStopped();
                    }
                }
                //Hack to make spectators work until they are made entities
                else if (MySession.Static.CameraController is MySpectatorCameraController && MySpectatorCameraController.Static.SpectatorCameraMovement == MySpectatorCameraMovementEnum.ConstantDelta)
                {
                    if (cameraControllerMovementAllowed)
                    {
                        MySpectatorCameraController.Static.MoveAndRotate(moveIndicator, rotationIndicator, rollIndicator);
                    }
                }

                if (shouldStopControlledObject)
                {
                    MySession.Static.ControlledEntity.MoveAndRotateStopped();
                }

                m_cameraControllerMovementAllowed = cameraControllerMovementAllowed;
                m_lookAroundEnabled = lookAroundEnabled;
            }
        }
Ejemplo n.º 21
0
 internal static void AddSingleSprite(ISrvBindable tex, Color color, Vector2 origin, Vector2 tangent, Rectangle?sourceRect, RectangleF destinationRect)
 {
     AddSingleSprite(tex, tex.Size, color, origin, tangent, sourceRect, destinationRect);
 }
 public override void DebugDraw(VRageMath.Vector2 position, VRageMath.Vector2 size, List <MyBehaviorTreeNodeMemory> nodesMemory)
 {
 }
Ejemplo n.º 23
0
        // viewport, render target
        internal unsafe static void Draw(IRtvBindable rtv, MyViewport viewport, IBlendState blendstate = null)
        {
            if (StackTop.m_internalBatch.Texture != null && StackTop.m_internalBatch.Count > 0)
                StackTop.m_internalBatch.Commit();
            StackTop.m_internalBatch = new MySpritesBatch();

            RC.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip);

            RC.SetInputLayout(m_inputLayout);
            //RC.SetScreenViewport();
            RC.SetViewport(viewport.OffsetX, viewport.OffsetY, viewport.Width, viewport.Height);

            RC.VertexShader.Set(m_vs);
            RC.AllShaderStages.SetConstantBuffer(MyCommon.FRAME_SLOT, MyCommon.FrameConstants);
            RC.AllShaderStages.SetConstantBuffer(MyCommon.PROJECTION_SLOT, MyCommon.GetObjectCB(64));
            RC.PixelShader.Set(m_ps);
            RC.PixelShader.SetSamplers(0, MySamplerStateManager.StandardSamplers);

            //RC.BindDepthRT(null, DepthStencilAccess.DepthReadOnly, MyRender11.Backbuffer);
            // to reset state
            RC.SetRtv(rtv);

            RC.SetBlendState(blendstate == null ? MyBlendStateManager.BlendAlphaPremult : blendstate);
            RC.SetDepthStencilState(MyDepthStencilStateManager.IgnoreDepthStencil, 0);

            CheckBufferSize(StackTop.m_instances.Count);
            RC.SetVertexBuffer(0, m_VB.Buffer, m_VB.Stride);

            var mapping = MyMapping.MapDiscard(m_VB.Buffer);
            for (int i = 0; i < StackTop.m_instances.Count; i++)
            {
                var helper = StackTop.m_instances[i];
                mapping.WriteAndPosition(ref helper);
            }
            mapping.Unmap();

            mapping = MyMapping.MapDiscard(MyCommon.GetObjectCB(64));
            var viewportSize = new Vector2(viewport.Width, viewport.Height);
            mapping.WriteAndPosition(ref viewportSize);
            mapping.Unmap();

            foreach (var batch in StackTop.m_batches)
            {
                if(batch.ScissorRectangle.HasValue)
                {
                    RC.SetRasterizerState(MyRasterizerStateManager.ScissorTestRasterizerState);

                    var scissor = batch.ScissorRectangle.Value;
                    RC.SetScissorRectangle((int)scissor.X, (int)scissor.Y, (int)(scissor.X + scissor.Width), (int)(scissor.Y + scissor.Height));
                }
                else
                {
                    RC.SetRasterizerState(MyRasterizerStateManager.NocullRasterizerState);
                }

                RC.PixelShader.SetSrv(0, batch.Texture);
                RC.DrawInstanced(4, batch.Count, 0, batch.Start);
            }

            RC.SetBlendState(null);
            RC.SetRasterizerState(null);
            RC.SetPrimitiveTopology(PrimitiveTopology.TriangleList);

            StackTop.m_instances.Clear();
            StackTop.m_batches.Clear();
        }
Ejemplo n.º 24
0
        // viewport, render target
        internal unsafe static void Draw(IRtvBindable rtv, MyViewport viewport, IBlendState blendstate = null)
        {
            if (StackTop.m_internalBatch.Texture != null && StackTop.m_internalBatch.Count > 0)
            {
                StackTop.m_internalBatch.Commit();
            }
            StackTop.m_internalBatch = new MySpritesBatch();

            RC.SetPrimitiveTopology(PrimitiveTopology.TriangleStrip);

            RC.SetInputLayout(m_inputLayout);
            //RC.SetScreenViewport();
            RC.SetViewport(viewport.OffsetX, viewport.OffsetY, viewport.Width, viewport.Height);

            RC.VertexShader.Set(m_vs);
            RC.AllShaderStages.SetConstantBuffer(MyCommon.FRAME_SLOT, MyCommon.FrameConstants);
            RC.AllShaderStages.SetConstantBuffer(MyCommon.PROJECTION_SLOT, MyCommon.GetObjectCB(64));
            RC.PixelShader.Set(m_ps);
            RC.PixelShader.SetSamplers(0, MySamplerStateManager.StandardSamplers);

            //RC.BindDepthRT(null, DepthStencilAccess.DepthReadOnly, MyRender11.Backbuffer);
            // to reset state
            RC.SetRtv(rtv);

            RC.SetBlendState(blendstate == null ? MyBlendStateManager.BlendAlphaPremult : blendstate);
            RC.SetDepthStencilState(MyDepthStencilStateManager.IgnoreDepthStencil, 0);

            CheckBufferSize(StackTop.m_instances.Count);
            RC.SetVertexBuffer(0, m_VB);

            var mapping = MyMapping.MapDiscard(m_VB);

            for (int i = 0; i < StackTop.m_instances.Count; i++)
            {
                var helper = StackTop.m_instances[i];
                mapping.WriteAndPosition(ref helper);
            }
            mapping.Unmap();

            mapping = MyMapping.MapDiscard(MyCommon.GetObjectCB(64));
            var viewportSize = new Vector2(viewport.Width, viewport.Height);

            mapping.WriteAndPosition(ref viewportSize);
            mapping.Unmap();

            foreach (var batch in StackTop.m_batches)
            {
                if (batch.ScissorRectangle.HasValue)
                {
                    RC.SetRasterizerState(MyRasterizerStateManager.ScissorTestRasterizerState);

                    var scissor = batch.ScissorRectangle.Value;
                    RC.SetScissorRectangle((int)scissor.X, (int)scissor.Y, (int)(scissor.X + scissor.Width), (int)(scissor.Y + scissor.Height));
                }
                else
                {
                    RC.SetRasterizerState(MyRasterizerStateManager.NocullRasterizerState);
                }

                RC.PixelShader.SetSrv(0, batch.Texture);
                RC.DrawInstanced(4, batch.Count, 0, batch.Start);
            }

            RC.SetBlendState(null);
            RC.SetRasterizerState(null);
            RC.SetPrimitiveTopology(PrimitiveTopology.TriangleList);

            StackTop.m_instances.Clear();
            StackTop.m_batches.Clear();
        }
Ejemplo n.º 25
0
 internal void AddSprite(Vector2 clipOffset, Vector2 clipScale, Vector2 texOffset, Vector2 texScale, Byte4 color)
 {
     MySpritesRenderer.m_spriteInstanceList.Add(new MyVertexFormatSpritePositionTextureColor(
                                                    new HalfVector4(clipOffset.X, clipOffset.Y, clipScale.X, clipScale.Y),
                                                    new HalfVector4(texOffset.X, texOffset.Y, texScale.X, texScale.Y),
                                                    color));
 }
Ejemplo n.º 26
0
        // viewport, render target
        internal unsafe static void Draw(RenderTargetView rtv, MyViewport viewport)
        {
            if (StackTop().m_internalBatch.Texture != null && StackTop().m_internalBatch.Count > 0)
                StackTop().m_internalBatch.Commit();
            StackTop().m_internalBatch = new MySpritesBatch();

            RC.DeviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;

            RC.SetIL(m_inputLayout);
            //RC.SetupScreenViewport();
            RC.DeviceContext.Rasterizer.SetViewport(viewport.OffsetX, viewport.OffsetY, viewport.Width, viewport.Height);

            RC.SetVS(m_vs);
            RC.SetCB(MyCommon.FRAME_SLOT, MyCommon.FrameConstants);
            RC.SetCB(MyCommon.PROJECTION_SLOT, MyCommon.GetObjectCB(64));
            RC.SetPS(m_ps);
            RC.DeviceContext.PixelShader.SetSamplers(0, MyRender11.StandardSamplers);

            //RC.BindDepthRT(null, DepthStencilAccess.DepthReadOnly, MyRender11.Backbuffer);
            // to reset state
            RC.BindDepthRT(null, DepthStencilAccess.DepthReadOnly, null);
            RC.DeviceContext.OutputMerger.SetRenderTargets(rtv);
            
            RC.SetBS(MyRender11.BlendGui);

            CheckBufferSize(StackTop().m_instances.Count);
            RC.SetVB(0, m_VB.Buffer, m_VB.Stride);

            var mapping = MyMapping.MapDiscard(m_VB.Buffer);
            for (int i = 0; i < StackTop().m_instances.Count; i++)
            {
                var helper = StackTop().m_instances[i];
                mapping.WriteAndPosition(ref helper);
            }
            mapping.Unmap();

            mapping = MyMapping.MapDiscard(MyCommon.GetObjectCB(64));
            var viewportSize = new Vector2(viewport.Width, viewport.Height);
            mapping.WriteAndPosition(ref viewportSize);
            mapping.Unmap();

            foreach (var batch in StackTop().m_batches)
            {
                if(batch.ScissorRectangle.HasValue)
                {
                    RC.SetRS(MyRender11.m_scissorTestRasterizerState);

                    var scissor = batch.ScissorRectangle.Value;
                    RC.DeviceContext.Rasterizer.SetScissorRectangle((int)scissor.X, (int)scissor.Y, (int)(scissor.X + scissor.Width), (int)(scissor.Y + scissor.Height));
                }
                else
                {
                    RC.SetRS(MyRender11.m_nocullRasterizerState);
                }

                RC.BindRawSRV(0, batch.Texture);
                RC.DeviceContext.DrawInstanced(4, batch.Count, 0, batch.Start);
            }

            RC.SetBS(null);
            RC.SetRS(null);

            StackTop().m_instances.Clear();
            StackTop().m_batches.Clear();
        }
Ejemplo n.º 27
0
        static TexId RegisterTexture(string name, string contentPath, MyTextureEnum type, Resource resource, Vector2 size)
        {
            var nameKey = MyStringId.GetOrCompute(name);
            if (!NameIndex.ContainsKey(nameKey))
            {
                var texId = NameIndex[nameKey] = new TexId { Index = Textures.Allocate() };

                Textures.Data[texId.Index] = new MyTextureInfo
                {
                    Name = name,
                    ContentPath = contentPath,
                    Type = type,
                    Resource = resource,
                    Size = size
                };

                resource.DebugName = name;

                Views[texId.Index] = new ShaderResourceView(MyRender11.Device, resource);
                Views[texId.Index].DebugName = name;
            }
            else // reregistered after device reset
            {
                var id = NameIndex[nameKey];
                
                if(Textures.Data[id.Index].Resource == null)
                {
                    Textures.Data[id.Index].Resource = resource;
                    resource.DebugName = name;
                    Views[id.Index] = new ShaderResourceView(MyRender11.Device, resource);
                    Views[id.Index].DebugName = name;
                }
            }

            return NameIndex[nameKey];
        }
Ejemplo n.º 28
0
 internal static void AddSingleSprite(TexId texId, Color color, Vector2 origin, Vector2 tangent, Rectangle?sourceRect, RectangleF destinationRect)
 {
     AddSingleSprite(MyTextures.Views[texId.Index], MyTextures.GetSize(texId), color, origin, tangent, sourceRect, destinationRect);
 }
Ejemplo n.º 29
0
 internal static void PushState(Vector2 ? targetResolution = null)
 {
     FlushInternalBatch();
     ++m_currentStackTop;
     if(m_contextsStack.Count == m_currentStackTop)
     {
         m_contextsStack.Add(new MySpritesContext());
     }
     StackTop().m_resolution = targetResolution;
 }
Ejemplo n.º 30
0
        // viewport, render target
        internal unsafe static void Draw(RenderTargetView rtv, MyViewport viewport)
        {
            if (StackTop().m_internalBatch.Texture != null && StackTop().m_internalBatch.Count > 0)
            {
                StackTop().m_internalBatch.Commit();
            }
            StackTop().m_internalBatch = new MySpritesBatch();

            RC.DeviceContext.InputAssembler.PrimitiveTopology = PrimitiveTopology.TriangleStrip;

            RC.SetIL(m_inputLayout);
            //RC.SetupScreenViewport();
            RC.DeviceContext.Rasterizer.SetViewport(viewport.OffsetX, viewport.OffsetY, viewport.Width, viewport.Height);

            RC.SetVS(m_vs);
            RC.SetCB(MyCommon.FRAME_SLOT, MyCommon.FrameConstants);
            RC.SetCB(MyCommon.PROJECTION_SLOT, MyCommon.GetObjectCB(64));
            RC.SetPS(m_ps);
            RC.DeviceContext.PixelShader.SetSamplers(0, MyRender11.StandardSamplers);

            //RC.BindDepthRT(null, DepthStencilAccess.DepthReadOnly, MyRender11.Backbuffer);
            // to reset state
            RC.BindDepthRT(null, DepthStencilAccess.DepthReadOnly, null);
            RC.DeviceContext.OutputMerger.SetRenderTargets(rtv);

            RC.SetBS(MyRender11.BlendGui);

            CheckBufferSize(StackTop().m_instances.Count);
            RC.SetVB(0, m_VB.Buffer, m_VB.Stride);

            var mapping = MyMapping.MapDiscard(m_VB.Buffer);

            for (int i = 0; i < StackTop().m_instances.Count; i++)
            {
                var helper = StackTop().m_instances[i];
                mapping.WriteAndPosition(ref helper);
            }
            mapping.Unmap();

            mapping = MyMapping.MapDiscard(MyCommon.GetObjectCB(64));
            var viewportSize = new Vector2(viewport.Width, viewport.Height);

            mapping.WriteAndPosition(ref viewportSize);
            mapping.Unmap();

            foreach (var batch in StackTop().m_batches)
            {
                if (batch.ScissorRectangle.HasValue)
                {
                    RC.SetRS(MyRender11.m_scissorTestRasterizerState);

                    var scissor = batch.ScissorRectangle.Value;
                    RC.DeviceContext.Rasterizer.SetScissorRectangle((int)scissor.X, (int)scissor.Y, (int)(scissor.X + scissor.Width), (int)(scissor.Y + scissor.Height));
                }
                else
                {
                    RC.SetRS(MyRender11.m_nocullRasterizerState);
                }

                RC.BindRawSRV(0, batch.Texture);
                RC.DeviceContext.DrawInstanced(4, batch.Count, 0, batch.Start);
            }

            RC.SetBS(null);
            RC.SetRS(null);

            StackTop().m_instances.Clear();
            StackTop().m_batches.Clear();
        }
Ejemplo n.º 31
0
 internal static void AddSingleSprite(TexId texId, Color color, Vector2 origin, Vector2 tangent, Rectangle? sourceRect, RectangleF destinationRect)
 {
     AddSingleSprite(MyTextures.Views[texId.Index], MyTextures.GetSize(texId), color, origin, tangent, sourceRect, destinationRect);
 }
Ejemplo n.º 32
0
        internal static void CalculateSpriteClipspace(RectangleF destination, Vector2 screenSize, out Vector2 clipOffset, out Vector2 clipScale)
        {
            Vector2 scale       = destination.Size / screenSize;
            Vector2 translation = destination.Position / screenSize;

            clipScale    = scale * 2;
            clipOffset   = translation * 2 - 1;
            clipOffset.Y = -clipOffset.Y;
            //clipOffset += new Vector2(0.5f, -0.5f) * clipScale;
        }
Ejemplo n.º 33
0
 public void TakeScreenshot(string saveToPath = null, bool ignoreSprites = false, Vector2? sizeMultiplier = null, bool showNotification = true)
 {
 }