Exemple #1
0
 public override void Update()
 {
     texQuad[0] = new CustomVertex.TransformedTextured(origin.X, origin.Y, 0, 1, 0, 0);
     texQuad[1] = new CustomVertex.TransformedTextured(origin.X + dimensions.Width, origin.Y, 0, 1, 0, 0);
     texQuad[2] = new CustomVertex.TransformedTextured(origin.X, origin.Y + dimensions.Height, 0, 1, 0, 0);
     texQuad[3] = new CustomVertex.TransformedTextured(origin.X + dimensions.Width, origin.Y + dimensions.Height, 0, 1, 0, 0);
 }
Exemple #2
0
 public override void Update()
 {
     texQuad[0] = new CustomVertex.TransformedTextured(origin.X, origin.Y, 0, 1, 0, 0);
     texQuad[1] = new CustomVertex.TransformedTextured(origin.X + dimensions.Width, origin.Y, 0, 1, 0, 0);
     texQuad[2] = new CustomVertex.TransformedTextured(origin.X, origin.Y + dimensions.Height, 0, 1, 0, 0);
     texQuad[3] = new CustomVertex.TransformedTextured(origin.X + dimensions.Width, origin.Y + dimensions.Height, 0, 1, 0, 0);
 }
        public void Render(Device Device3D, DeviceInfo deviceInfo)
        {
            try
            {
                Device3D.RenderState.FogEnable = false;

                CustomVertex.TransformedTextured[] data = new CustomVertex.TransformedTextured[4];
                data[0].X  = 0.0f;
                data[0].Y  = 0.0f;
                data[0].Z  = 0.0f;
                data[0].Tu = 0.0f;
                data[0].Tv = 0.0f;
                data[1].X  = Device3D.Viewport.Width;
                data[1].Y  = 0.0f;
                data[1].Z  = 0.0f;
                data[1].Tu = 1.0f;
                data[1].Tv = 0.0f;
                data[2].X  = 0.0f;
                data[2].Y  = Device3D.Viewport.Height;
                data[2].Z  = 0.0f;
                data[2].Tu = 0.0f;
                data[2].Tv = 1.0f;
                data[3].X  = Device3D.Viewport.Width;
                data[3].Y  = Device3D.Viewport.Height;
                data[3].Z  = 0.0f;
                data[3].Tu = 1.0f;
                data[3].Tv = 1.0f;

                m_vb.SetData(data, 0, 0);

                Device3D.SetStreamSource(0, m_vb, 0);
                Device3D.VertexFormat = CustomVertex.TransformedTextured.Format;

                // Set the texture
                Device3D.SetTexture(0, image.GetTexture());

                // Render the face
                Device3D.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);

                Device3D.RenderState.FogEnable = deviceInfo.FogEnabled;
            }
            catch (DirectXException d3de)
            {
                Console.AddLine("Unable to display SplashScreen ");
                Console.AddLine(d3de.ErrorString);
            }
            catch (Exception e)
            {
                Console.AddLine("Unable to display SplashScreen ");
                Console.AddLine(e.Message);
            }

            // check for timeout
            float fCurrentTime = Utils.Timer(TIMER.GETABSOLUTETIME);

            fTimeLeft = m_EndTime - fCurrentTime;

            //return (fCurrentTime > m_EndTime);
        }
        public void Initialize(int height, int width, int posx, int posy)
        {
            origin.X = posx;
            origin.Y = posy;
            Height   = height;
            Width    = width;

            renderButtonVerts[0] = new CustomVertex.TransformedTextured(origin.X, origin.Y, 0.5f, 1, 0, 0);
            renderButtonVerts[1] = new CustomVertex.TransformedTextured(origin.X, origin.Y + Height, 0.5f, 1, 0, 1);
            renderButtonVerts[2] = new CustomVertex.TransformedTextured(origin.X + width, origin.Y, 0.5f, 1, 1, 0);
            renderButtonVerts[3] = new CustomVertex.TransformedTextured(origin.X + width, origin.Y + Height, 0.5f, 1, 1, 1);
        }
        public ScreenBillboard(Point pos, int sizeX, int sizeY, IShader shader)
        {
            billboardShader = shader;
            verts           = new CustomVertex.TransformedTextured[6];
            verts[2]        = new CustomVertex.TransformedTextured(pos.X, pos.Y, 0.0f, 1.0f, 0, 0);
            verts[1]        = new CustomVertex.TransformedTextured(pos.X, pos.Y + sizeY, 0.0f, 1.0f, 0, 1);
            verts[0]        = new CustomVertex.TransformedTextured(pos.X + sizeX, pos.Y, 0.0f, 1.0f, 1, 0);

            verts[3] = new CustomVertex.TransformedTextured(pos.X + sizeX, pos.Y + sizeY, 0.0f, 1.0f, 1, 1);
            verts[4] = new CustomVertex.TransformedTextured(pos.X, pos.Y + sizeY, 0.0f, 1.0f, 0, 1);
            verts[5] = new CustomVertex.TransformedTextured(pos.X + sizeX, pos.Y, 0.0f, 1.0f, 1, 0);
        }
Exemple #6
0
        private void SetMovieWindow()
        {
            double movieAspectRatio = (double)currentVideo.DefaultSize.Height / (double)currentVideo.DefaultSize.Width;;
            int    targetHeight     = (int)(screenWidth * movieAspectRatio);
            int    diff             = (screenHeight - targetHeight) / 2;

            CustomVertex.TransformedTextured[] verts = (CustomVertex.TransformedTextured[])vertices.Lock(0, 0);
            verts[0] = new CustomVertex.TransformedTextured(0, diff, 0.5f, 1, 0, 0);
            verts[1] = new CustomVertex.TransformedTextured(screenWidth, diff, 0.5f, 1, 1, 0);
            verts[2] = new CustomVertex.TransformedTextured(0, screenHeight - diff, 0.5f, 1, 0, 1);
            verts[3] = new CustomVertex.TransformedTextured(screenWidth, screenHeight - diff, 0.5f, 1, 1, 1);
            vertices.Unlock();
        }
 public SplashScreen(Device device3D, string fileName, SplashButton[] buttons)
 {
     sButtons = buttons;
     device3d = device3D;
     int h = device3d.PresentationParameters.BackBufferHeight;
     int w = device3d.PresentationParameters.BackBufferWidth;
     vertices = new CustomVertex.TransformedTextured[6];
     vertices[0] = new CustomVertex.TransformedTextured(new Vector4(0, 0, 0.1f, 1f), 0, 0);
     vertices[1] = new CustomVertex.TransformedTextured(new Vector4(w, 0, 0.1f, 1f), 1, 0);
     vertices[2] = new CustomVertex.TransformedTextured(new Vector4(0, h, 0.1f, 1f), 0, 1);
     vertices[3] = new CustomVertex.TransformedTextured(new Vector4(0, h, 0.1f, 1f), 0, 1);
     vertices[4] = new CustomVertex.TransformedTextured(new Vector4(w, 0, 0.1f, 1f), 1, 0);
     vertices[5] = new CustomVertex.TransformedTextured(new Vector4(w, h, 0.1f, 1f), 1, 1);
     texture = TextureLoader.FromFile(device3d, fileName);
     Enable = true;
 }
        private void CreateVertexBuffer(int wx, int wy, int wwidth, int wheight)
        {
            if (_vertexBuffer == null)
            {
                Usage usage = Usage.None;
                if (OSInfo.OSInfo.VistaOrLater())
                {
                    usage = Usage.Dynamic | Usage.WriteOnly;
                }
                _vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedTextured),
                                                 4, GUIGraphicsContext.DX9Device,
                                                 usage,
                                                 CustomVertex.TransformedTextured.Format,
                                                 GUIGraphicsContext.GetTexturePoolType());
                _wx = _wy = _wwidth = _wheight = 0;
            }

            if (_wx != wx || _wy != wy || _wwidth != wwidth || _wheight != wheight)
            {
                CustomVertex.TransformedTextured[] verts = (CustomVertex.TransformedTextured[])_vertexBuffer.Lock(0, 0);

                // upper left
                verts[0] = new CustomVertex.TransformedTextured(wx, wy, 0, 1, 0, 0);

                // upper right
                verts[1] = new CustomVertex.TransformedTextured(wx + wwidth, wy, 0, 1, 1, 0);

                // lower left
                verts[2] = new CustomVertex.TransformedTextured(wx, wy + wheight, 0, 1, 0, 1);

                // lower right
                verts[3] = new CustomVertex.TransformedTextured(wx + wwidth, wy + wheight, 0, 1, 1, 1);

                _vertexBuffer.SetData(verts, 0, LockFlags.None);
                _vertexBuffer.Unlock();

                // remember what the vertexBuffer is set to
                _wy      = wy;
                _wx      = wx;
                _wheight = wheight;
                _wwidth  = wwidth;
            }
        }
Exemple #9
0
        /// <summary>
        /// Creates a vertex buffer for a transformed textured quad matching
        /// the given rectangle and stores it in vertexBuffer
        /// </summary>
        /// <param name="wx"></param>
        /// <param name="wy"></param>
        /// <param name="wwidth"></param>
        /// <param name="wheight"></param>
        private void CreateVertexBuffer(int wx, int wy, int wwidth, int wheight)
        {
            if (_vertexBuffer == null)
            {
                Log.Debug("Subtitle: Creating vertex buffer");
                _vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedTextured),
                                                 4, GUIGraphicsContext.DX9Device,
                                                 Usage.Dynamic | Usage.WriteOnly,
                                                 CustomVertex.TransformedTextured.Format,
                                                 GUIGraphicsContext.GetTexturePoolType());
                _wx = _wy = _wwidth = _wheight = 0;
            }

            if (_wx != wx || _wy != wy || _wwidth != wwidth || _wheight != wheight)
            {
                Log.Debug("Subtitle: Setting vertices");
                CustomVertex.TransformedTextured[] verts = (CustomVertex.TransformedTextured[])_vertexBuffer.Lock(0, 0);

                // upper left
                verts[0] = new CustomVertex.TransformedTextured(wx, wy, 0, 1, 0, 0);

                // upper right
                verts[1] = new CustomVertex.TransformedTextured(wx + wwidth, wy, 0, 1, 1, 0);

                // lower left
                verts[2] = new CustomVertex.TransformedTextured(wx, wy + wheight, 0, 1, 0, 1);

                // lower right
                verts[3] = new CustomVertex.TransformedTextured(wx + wwidth, wy + wheight, 0, 1, 1, 1);

                _vertexBuffer.SetData(verts, 0, LockFlags.None);

                // remember what the vertexBuffer is set to
                _wy      = wy;
                _wx      = wx;
                _wheight = wheight;
                _wwidth  = wwidth;
            }
        }
Exemple #10
0
        public virtual void Init(Device dxDevice, Texture tex, System.Drawing.Rectangle rect, Matrix xform, float uTiling = 1.0f, float vTiling = 1.0f)
        {
            texture  = tex;
            surface  = texture.GetSurfaceLevel(0);
            vertices = new VertexBuffer(typeof(CustomVertex.TransformedTextured), 4, dxDevice, 0, CustomVertex.TransformedTextured.Format, Pool.Default);
            GraphicsStream str = vertices.Lock(0, 0, 0);

            CustomVertex.TransformedTextured[] quad = new CustomVertex.TransformedTextured[4];

            Vector4 topRight    = Vector4.Transform(new Vector4(rect.X + rect.Width, rect.Y, 0.0f, 1.0f), xform);
            Vector4 topLeft     = Vector4.Transform(new Vector4(rect.X, rect.Y, 0.0f, 1.0f), xform);
            Vector4 bottomRight = Vector4.Transform(new Vector4(rect.X + rect.Width, rect.Y + rect.Height, 0.0f, 1.0f), xform);
            Vector4 bottomLeft  = Vector4.Transform(new Vector4(rect.X, rect.Y + rect.Height, 0.0f, 1.0f), xform);

            Console.WriteLine(topRight);
            quad[0] = new CustomVertex.TransformedTextured(topLeft.X, topLeft.Y, topLeft.Z, 1.0f, 0.0f, 0.0f);
            quad[1] = new CustomVertex.TransformedTextured(topRight.X, topRight.Y, topRight.Z, 1.0f, uTiling, 0.0f);
            quad[2] = new CustomVertex.TransformedTextured(bottomLeft.X, bottomLeft.Y, bottomLeft.Z, 1.0f, 0, vTiling);
            quad[3] = new CustomVertex.TransformedTextured(bottomRight.X, bottomRight.Y, bottomRight.Z, 1.0f, uTiling, vTiling);

            str.Write(quad);
            vertices.Unlock();
        }
Exemple #11
0
        public void DrawTexture( Point pt, Rectangle rectOrigin, D3DTexture2D pTexture)
        {
            CustomVertex.TransformedTextured[] vertices = new CustomVertex.TransformedTextured[4];

            int witWidth = pTexture.BaseSurface.Description.Width;
            int witHeight = pTexture.BaseSurface.Description.Height;

            vertices[0].Position = new Vector4(pt.X, pt.Y, 0.0f, 1.0f);
            vertices[0].Rhw = 1.0f;
            vertices[0].Tu = ((float)rectOrigin.X/witWidth);
            vertices[0].Tv = ((float)rectOrigin.Y / witHeight);

            vertices[1].Position = new Vector4(pt.X + rectOrigin.Width, pt.Y, 0.0f, 1.0f);
            vertices[1].Rhw = 1.0f;
            vertices[1].Tu = ((float)(rectOrigin.X + rectOrigin.Width)/witWidth);
            vertices[1].Tv = ((float)rectOrigin.Y/witHeight);

            vertices[2].Position = new Vector4(pt.X, pt.Y + rectOrigin.Height, 0.0f, 1.0f);
            vertices[2].Rhw = 1.0f;
            vertices[2].Tu = ((float) rectOrigin.X/witWidth);
            vertices[2].Tv = ((float)(rectOrigin.Y + rectOrigin.Height) / witHeight);

            vertices[3].Position = new Vector4(pt.X + rectOrigin.Width, pt.Y + rectOrigin.Height, 0.0f, 1.0f);
            vertices[3].Rhw = 1.0f;
            vertices[3].Tu = ((float)(rectOrigin.X + rectOrigin.Width) / witWidth);
            vertices[3].Tv = ((float)(rectOrigin.Y + rectOrigin.Height) / witHeight);

            m_d3dDevice.SetSamplerState(0, SamplerStageStates.AddressU, true);
            m_d3dDevice.SetSamplerState(0, SamplerStageStates.AddressV, true);
            m_d3dDevice.SetSamplerState(0, SamplerStageStates.MinFilter, (int)TextureFilter.Linear);
            //m_d3dDevice.SetSamplerState(0, SamplerStageStates.MagFilter, (int)TextureFilter.Linear);

            m_d3dDevice.SetRenderState(RenderStates.CullMode, (int)Cull.None);
            m_d3dDevice.SetRenderState(RenderStates.AlphaBlendEnable, true);
            m_d3dDevice.SetRenderState(RenderStates.SourceBlend, (int)Blend.SourceAlpha);
            m_d3dDevice.SetRenderState(RenderStates.DestinationBlend, (int)Blend.InvSourceAlpha);
            m_d3dDevice.SetRenderState(RenderStates.ZEnable, false);

            m_d3dDevice.SetTextureStageState( 0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1 );
            m_d3dDevice.SetTextureStageState( 0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
            m_d3dDevice.SetTextureStageState( 0, TextureStageStates.AlphaOperation, (int)TextureOperation.Modulate );
            m_d3dDevice.SetTextureStageState(0, TextureStageStates.AlphaArgument1, (int)TextureArgument.TextureColor);
            m_d3dDevice.SetTextureStageState(0, TextureStageStates.AlphaArgument2, (int)TextureArgument.TFactor);
            //m_d3dDevice.SetRenderState(RenderStates.TextureFactor, Color.FromArgb(255, 0, 0, 0).ToArgb());

            m_d3dDevice.VertexShader = null;
            m_d3dDevice.SetTexture(0, pTexture.BaseTexture);
            m_d3dDevice.VertexFormat = CustomVertex.TransformedTextured.Format;
            m_d3dDevice.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, vertices);
            m_d3dDevice.SetTexture( 0, null );
        }
    private void CreateVertexBuffer(int wx, int wy, int wwidth, int wheight)
    {
      if (_vertexBuffer == null)
      {
        _vertexBuffer = new VertexBuffer(typeof(CustomVertex.TransformedTextured),
                                        4, GUIGraphicsContext.DX9Device,
                                        Usage.Dynamic | Usage.WriteOnly, 
                                        CustomVertex.TransformedTextured.Format,
                                        GUIGraphicsContext.GetTexturePoolType());
        _wx = _wy = _wwidth = _wheight = 0;
      }

      if (_wx != wx || _wy != wy || _wwidth != wwidth || _wheight != wheight)
      {
        CustomVertex.TransformedTextured[] verts = (CustomVertex.TransformedTextured[])_vertexBuffer.Lock(0, 0);

        // upper left
        verts[0] = new CustomVertex.TransformedTextured(wx, wy, 0, 1, 0, 0);

        // upper right
        verts[1] = new CustomVertex.TransformedTextured(wx + wwidth, wy, 0, 1, 1, 0);

        // lower left
        verts[2] = new CustomVertex.TransformedTextured(wx, wy + wheight, 0, 1, 0, 1);

        // lower right
        verts[3] = new CustomVertex.TransformedTextured(wx + wwidth, wy + wheight, 0, 1, 1, 1);

        _vertexBuffer.SetData(verts, 0, LockFlags.None);
        _vertexBuffer.Unlock();
        
        // remember what the vertexBuffer is set to
        _wy = wy;
        _wx = wx;
        _wheight = wheight;
        _wwidth = wwidth;
      }
    }
Exemple #13
0
        private void setup_screen()
        {
            customvertex = new CustomVertex.TransformedTextured[6];
            vb = new VertexBuffer(device, Marshal.SizeOf(typeof(CustomVertex.TransformedTextured)) * 6, Usage.WriteOnly, CustomVertex.TransformedTextured.Format, Pool.Default);

            customvertex[0] = new CustomVertex.TransformedTextured(new Vector4(0.0f, 0.0f, 0.0f, 1.0f), new Vector2(0.0f, 0.0f));
            customvertex[1] = new CustomVertex.TransformedTextured(new Vector4(width, 0.0f, 0.0f, 1.0f), new Vector2(0.625f, 0.0f));
            customvertex[2] = new CustomVertex.TransformedTextured(new Vector4(0.0f, height, 0.0f, 1.0f), new Vector2(0.0f, 0.5625f));
            customvertex[3] = new CustomVertex.TransformedTextured(new Vector4(width, 0.0f, 0.0f, 1.0f), new Vector2(0.625f, 0.0f));
            customvertex[4] = new CustomVertex.TransformedTextured(new Vector4(width, height, 0.0f, 1.0f), new Vector2(0.625f, 0.5625f));
            customvertex[5] = new CustomVertex.TransformedTextured(new Vector4(0.0f, height, 0.0f, 1.0f), new Vector2(0.0f, 0.5625f));

            vertex_data = vb.Lock(0, Marshal.SizeOf(typeof(CustomVertex.TransformedTextured)) * 6, LockFlags.Discard);
            vertex_data.WriteRange(customvertex);
            vb.Unlock();
        }
Exemple #14
0
        /// <summary>
        /// Draw the bitmap to the back buffer.
        /// </summary>
        /// <param name="x">X destination of the draw</param>
        /// <param name="y">Y destination of the draw</param>
        /// <param name="sourceRegion">Source region of the draw</param>
        /// <param name="bmp">Bitmap to be drawn</param>
        public void DrawBitmap(int x, int y, Rectangle sourceRegion,
                               IBitmap bmp)
        {
            // make sure the function is passed an appropriate implementation
            DirectXBitmap dxBitmap = null;

            try
            {
                dxBitmap = (DirectXBitmap)bmp;
            }
            catch (InvalidCastException e)
            {
                throw new ApplicationException(
                          "The bitmap given was not created by" +
                          "this class' CreateBitmap() method.", e);
            }

            // Clip the regions to the screen
            if (!ValidateRegions(ref x, ref y, ref sourceRegion))
            {
                return;
            }

            // determine texture coordinates so that
            // the there is a 1-1 mapping between texels and screen pixels
            Rectangle dest = new Rectangle(x, y, sourceRegion.Width,
                                           sourceRegion.Height);
            RectangleF textureRect = new RectangleF(
                ((float)sourceRegion.X + 0.5F) / dxBitmap.Width,
                ((float)sourceRegion.Y + 0.5F) / dxBitmap.Height,
                ((float)sourceRegion.Width + 0.5F) / dxBitmap.Width,
                ((float)sourceRegion.Height + 0.5F) / dxBitmap.Height);


            // load the vertex buffer with data for the two triangles
            // in the rectangle
            GraphicsStream stm = vbTex.Lock(0, 0, 0);

            CustomVertex.TransformedTextured[] verts =
                new CustomVertex.TransformedTextured[4];

            if ((drawOptions & DrawOptions.BlitMirrorLeftRight) == 0)
            {
                verts[0].X   = dest.Right;
                verts[0].Y   = dest.Top;
                verts[0].Z   = 0.5f;
                verts[0].Rhw = 1;
                verts[0].Tu  = textureRect.Right;
                verts[0].Tv  = textureRect.Top;
                verts[1].X   = dest.Right;
                verts[1].Y   = dest.Bottom;
                verts[1].Z   = 0.5f;
                verts[1].Rhw = 1;
                verts[1].Tu  = textureRect.Right;
                verts[1].Tv  = textureRect.Bottom;
                verts[2].X   = dest.Left;
                verts[2].Y   = dest.Top;
                verts[2].Z   = 0.5f;
                verts[2].Rhw = 1;
                verts[2].Tu  = textureRect.Left;
                verts[2].Tv  = textureRect.Top;
                verts[3].X   = dest.Left;
                verts[3].Y   = dest.Bottom;
                verts[3].Z   = 0.5f;
                verts[3].Rhw = 1;
                verts[3].Tu  = textureRect.Left;
                verts[3].Tv  = textureRect.Bottom;
            }
            else
            {
                verts[0].X   = dest.Right;
                verts[0].Y   = dest.Top;
                verts[0].Z   = 0.5f;
                verts[0].Rhw = 1;
                verts[0].Tu  = textureRect.Left;
                verts[0].Tv  = textureRect.Top;
                verts[1].X   = dest.Right;
                verts[1].Y   = dest.Bottom;
                verts[1].Z   = 0.5f;
                verts[1].Rhw = 1;
                verts[1].Tu  = textureRect.Left;
                verts[1].Tv  = textureRect.Bottom;
                verts[2].X   = dest.Left;
                verts[2].Y   = dest.Top;
                verts[2].Z   = 0.5f;
                verts[2].Rhw = 1;
                verts[2].Tu  = textureRect.Right;
                verts[2].Tv  = textureRect.Top;
                verts[3].X   = dest.Left;
                verts[3].Y   = dest.Bottom;
                verts[3].Z   = 0.5f;
                verts[3].Rhw = 1;
                verts[3].Tu  = textureRect.Right;
                verts[3].Tv  = textureRect.Bottom;
            }

            stm.Write(verts);
            vbTex.Unlock();

            // bind the texture to next drawing operation
            device.SetTexture(0, dxBitmap.Texture);

            // bind the vertex data to the next drawing operation
            device.SetStreamSource(0, vbTex, 0);
#if DESKTOP
            device.VertexFormat =
                CustomVertex.TransformedTextured.Format;
#endif
            // perform the draw
            device.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
        }
Exemple #15
0
        /// <summary>
        /// Draw the console if it is visible
        /// </summary>
        public static void Render()
        {
            if (m_bVisible)
            {
                bool fog_state = CGameEngine.Device3D.RenderState.FogEnable;

                CGameEngine.Device3D.RenderState.FogEnable = false;

                // determine how much of the console will be visible based on whether it is opening,
                // open, or closing
                if (m_bOpening && m_Percent <= m_MaxPercent)
                {
                    m_Percent += 0.05f;
                }
                else if (m_bClosing && m_Percent >= 0.0f)
                {
                    m_Percent -= 0.05f;
                    if (m_Percent <= 0.0f)
                    {
                        m_bClosing = false;
                        m_bVisible = false;
                    }
                }

                // render the console background
                try
                {
                    int line = (int)((m_Percent * CGameEngine.Device3D.Viewport.Height) - 5 - m_pFont.LineHeight);

                    if (line > 5)
                    {
                        // draw the image to the device
                        try
                        {
                            CustomVertex.TransformedTextured[] data = new CustomVertex.TransformedTextured[4];
                            data[0].X  = CGameEngine.Device3D.Viewport.Width;
                            data[0].Y  = 0.0f - (1.0f - m_Percent) * CGameEngine.Device3D.Viewport.Height;
                            data[0].Z  = 0.0f;
                            data[0].Tu = 1.0f;
                            data[0].Tv = 0.0f;
                            data[1].X  = 0.0f;
                            data[1].Y  = 0.0f - (1.0f - m_Percent) * CGameEngine.Device3D.Viewport.Height;
                            data[1].Z  = 0.0f;
                            data[1].Tu = 0.0f;
                            data[1].Tv = 0.0f;
                            data[2].X  = CGameEngine.Device3D.Viewport.Width;
                            data[2].Y  = CGameEngine.Device3D.Viewport.Height - (1.0f - m_Percent) * CGameEngine.Device3D.Viewport.Height;
                            data[2].Z  = 0.0f;
                            data[2].Tu = 1.0f;
                            data[2].Tv = 1.0f;
                            data[3].X  = 0.0f;
                            data[3].Y  = CGameEngine.Device3D.Viewport.Height - (1.0f - m_Percent) * CGameEngine.Device3D.Viewport.Height;
                            data[3].Z  = 0.0f;
                            data[3].Tu = 0.0f;
                            data[3].Tv = 1.0f;

                            VertexBuffer vb = new VertexBuffer(typeof(CustomVertex.TransformedTextured), 4,
                                                               CGameEngine.Device3D, Usage.WriteOnly, CustomVertex.TransformedTextured.Format,
                                                               Pool.Default);

                            vb.SetData(data, 0, 0);

                            CGameEngine.Device3D.SetStreamSource(0, vb, 0);
                            CGameEngine.Device3D.VertexFormat         = CustomVertex.TransformedTextured.Format;
                            CGameEngine.Device3D.RenderState.CullMode = Microsoft.DirectX.Direct3D.Cull.Clockwise;

                            // Set the texture
                            CGameEngine.Device3D.SetTexture(0, m_Image.GetTexture());

                            // Render the face
                            CGameEngine.Device3D.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
                        }
                        catch (DirectXException d3de)
                        {
                            Console.AddLine("Unable to display console ");
                            Console.AddLine(d3de.ErrorString);
                        }
                        catch (Exception e)
                        {
                            Console.AddLine("Unable to display console ");
                            Console.AddLine(e.Message);
                        }

                        m_pFont.DrawText(2, line, Color.White, m_Entryline.ToString());
                        line -= (int)m_pFont.LineHeight;

                        foreach (String entry in m_Entries)
                        {
                            if (line < 5 || line > 300)
                            {
//								Debug.WriteLine("line is " + line);
                            }
                            if (line > 5)
                            {
                                m_pFont.DrawText(2, line, Color.White, entry);
                                line -= (int)m_pFont.LineHeight;
                            }
                        }
                    }
                }
                catch (DirectXException d3de)
                {
                    Debug.WriteLine("unable to render console");
                    Debug.WriteLine(d3de.ErrorString);
                }
                catch (Exception e)
                {
                    Debug.WriteLine("unable to render console");
                    Debug.WriteLine(e.Message);
                }

                CGameEngine.Device3D.RenderState.FogEnable = fog_state;
            }
        }
Exemple #16
0
        public static void renderBackground(Texture texture)
        {
            // To store the converted video
            // no longer required - textures now saved out and sent to a memory stream.
            //convertedVideo[frameCounter++] = texture;

            // Prevent anything from being rendered until ready
            if (globalSettings.videoPortal_eRenderReady == false)
            {
                return;
            }


            // Origionaly split out but more stable as part of this method
            if (device == null || device.Disposed)
            {
                return;
            }


            device.BeginScene();


            // Renders to a flat plane - i.e. the screen
            CustomVertex.TransformedTextured[] screenVert = new CustomVertex.TransformedTextured[4];
            screenVert[0] = new CustomVertex.TransformedTextured(0, 0, 0, 1, 0, 0);
            screenVert[1] = new CustomVertex.TransformedTextured(clientForm.Width, 0, 0, 1, 1, 0);
            screenVert[2] = new CustomVertex.TransformedTextured(clientForm.Width, clientForm.Height, 0, 1, 1, 1);
            screenVert[3] = new CustomVertex.TransformedTextured(0, clientForm.Height, 0, 1, 0, 1);
            // To tile textures, use the wrap texture type - It's used by default...
            // device.SamplerState[1].AddressU = TextureAddress.Wrap; device.SamplerState[1].AddressV = TextureAddress.Wrap;
            // Then set the U&V co-ordinates to the number of times you want the texture replicated
            // i.e. if you change both the U&V co-ords to 2 then you will see the texture tiled 4 times, 2 across and 2 down



            // Turn off while drawing the background
            //device.RenderState.ZBufferEnable = false;

            // Test with vertex buffer
            // buffer.SetData(screenVert, 0, LockFlags.None);


            // -----------Stuffn with --------------------------------
            //SamplerStateManager sam = new SamplerStateManager();
            //sam = TextureAddress.Border;
            //device.SetSamplerState(0,SamplerStageStates.SrgbTexture, true);

            //TextureAddress tex = new TextureAddress();
            //tex = TextureAddress.Border;

            // -----------Stuffn with --------------------------------


            //// These would probably work if the textures were first copied to a newly created texture in this
            //// transactions scope
            //fUtil.addFrame(device.GetTexture(0));
            //fUtil.addFrame(texture);


            //// This works to save the rendered frame to a BMP
            //Bitmap bmp = SaveToBitmap(device);
            //fUtil.addBmpFrame(bmp);


            // Attemptng to save the frame as a memory stream in the DDS format
            //SaveToDDSFile(device);
            //fUtil.addDDSFrame("TempDDSConv.dds");

            //fUtil.addMSFrame(aMS);



            // Set the texture to render to the background
            device.SetTexture(0, texture);


            if (lastFrame != null)
            {
                // For Vertex Buffer
                //device.SetStreamSource(0, buffer, 0,0);



                device.SetTexture(1, lastFrame);

                // Sets the U&V co-ordinates for the '1' (i.e. second) texture stage to the same as the first!
                // I wish ths was better f*****g documented, seriosuly
                device.TextureState[1].TextureCoordinateIndex = 0;

                // For Vertex Buffer
                //device.SetStreamSource(1, buffer, 0,0);


                //-------------- more stuffn
                //device.SamplerState[0].AddressU = TextureAddress.Border;
                //device.SamplerState[0].AddressV = TextureAddress.Border;

                // wrap is the default mode
                device.SamplerState[1].AddressU = TextureAddress.Wrap;
                device.SamplerState[1].AddressV = TextureAddress.Wrap;
                //-------------



                //// Blend and mix - around 50% transperancy
                device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.Add);


                // Lighter blend
                //device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.MultiplyAdd);

                // Subtract the darker colour from the lighter colour
                //device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.Subtract);

                // Add with a darker tinge
                //device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.AddSigned);

                // Add with highted highlights and darkened shadows
                //device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.AddSigned2X);

                // Add with a lighter mix
                //device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.AddSmooth);

                // Use colour to tint image mix
                //device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.Modulate);

                // Add image and inverse white parts of the image being added
                //device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.Lerp);


                // Black and white image add.
                //device.SetTextureStageState(0, TextureStageStates.ColorArgument1, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //device.SetTextureStageState(1, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.DotProduct3);



                //if (secondLastFrame != null)
                //{

                //    device.TextureState[2].TextureCoordinateIndex = 0;
                //    device.SetTextureStageState(1, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1);

                //    device.SetTexture(2, secondLastFrame);

                //    device.SetTextureStageState(2, TextureStageStates.ColorArgument1, (int)TextureArgument.Current);
                //    device.SetTextureStageState(2, TextureStageStates.ColorArgument2, (int)TextureArgument.TextureColor);
                //    device.SetTextureStageState(2, TextureStageStates.ColorOperation, (int)TextureOperation.Add);
                //}
            }
            //secondLastFrame = lastFrame;
            lastFrame = texture;


            //device.VertexFormat = CustomVertex.TransformedTextured.Format;
            device.VertexFormat = vertexFormat;

            device.DrawUserPrimitives(PrimitiveType.TriangleFan, 2, screenVert);

            // Turn it back on
            // device.RenderState.ZBufferEnable = true;



            // Origionaly split out but more stable in the same method
            device.EndScene();
            device.Present();
        }
    /// <summary>
    /// Creates a vertex buffer for a transformed textured quad matching
    /// the given rectangle and stores it in vertexBuffer
    /// </summary>
    /// <param name="wx"></param>
    /// <param name="wy"></param>
    /// <param name="wwidth"></param>
    /// <param name="wheight"></param>
    private void CreateVertexBuffer(int wx, int wy, int wwidth, int wheight)
    {
      if (_vertexBuffer == null)
      {
        Log.Debug("Subtitle: Creating vertex buffer");
        _vertexBuffer = new VertexBuffer(typeof (CustomVertex.TransformedTextured),
                                         4, GUIGraphicsContext.DX9Device,
                                         0, CustomVertex.TransformedTextured.Format,
                                         GUIGraphicsContext.GetTexturePoolType());
        _wx = _wy = _wwidth = _wheight = 0;
      }

      if (_wx != wx || _wy != wy || _wwidth != wwidth || _wheight != wheight)
      {
        Log.Debug("Subtitle: Setting vertices");
        CustomVertex.TransformedTextured[] verts = (CustomVertex.TransformedTextured[])_vertexBuffer.Lock(0, 0);

        // upper left
        verts[0] = new CustomVertex.TransformedTextured(wx, wy, 0, 1, 0, 0);

        // upper right
        verts[1] = new CustomVertex.TransformedTextured(wx + wwidth, wy, 0, 1, 1, 0);

        // lower left
        verts[2] = new CustomVertex.TransformedTextured(wx, wy + wheight, 0, 1, 0, 1);

        // lower right
        verts[3] = new CustomVertex.TransformedTextured(wx + wwidth, wy + wheight, 0, 1, 1, 1);

        _vertexBuffer.Unlock();

        // remember what the vertexBuffer is set to
        _wy = wy;
        _wx = wx;
        _wheight = wheight;
        _wwidth = wwidth;
      }
    }
    /// <summary>
    /// Creates a vertex buffer for a transformed textured quad matching
    /// the given rectangle and stores it in vertexBuffer
    /// </summary>
    /// <param name="wx"></param>
    /// <param name="wy"></param>
    /// <param name="wwidth"></param>
    /// <param name="wheight"></param>
    private void CreateVertexBuffer(int wx, int wy, int wwidth, int wheight)
    {
      if (_vertexBuffer == null)
      {
        Log.Debug("Subtitle: Creating vertex buffer");
        var usage = OSInfo.OSInfo.VistaOrLater() ? Usage.Dynamic | Usage.WriteOnly : 0;
        _vertexBuffer = new VertexBuffer(typeof (CustomVertex.TransformedTextured),
                                         4, GUIGraphicsContext.DX9Device,
                                         usage,
                                         CustomVertex.TransformedTextured.Format,
                                         GUIGraphicsContext.GetTexturePoolType());
        _wx = _wy = _wwidth = _wheight = 0;
      }

      if (_wx != wx || _wy != wy || _wwidth != wwidth || _wheight != wheight)
      {
        Log.Debug("Subtitle: Setting vertices");
        CustomVertex.TransformedTextured[] verts = (CustomVertex.TransformedTextured[])_vertexBuffer.Lock(0, 0);

        // upper left
        verts[0] = new CustomVertex.TransformedTextured(wx, wy, 0, 1, 0, 0);

        // upper right
        verts[1] = new CustomVertex.TransformedTextured(wx + wwidth, wy, 0, 1, 1, 0);

        // lower left
        verts[2] = new CustomVertex.TransformedTextured(wx, wy + wheight, 0, 1, 0, 1);

        // lower right
        verts[3] = new CustomVertex.TransformedTextured(wx + wwidth, wy + wheight, 0, 1, 1, 1);

        _vertexBuffer.SetData(verts, 0, LockFlags.None);

        // remember what the vertexBuffer is set to
        _wy = wy;
        _wx = wx;
        _wheight = wheight;
        _wwidth = wwidth;
      }
    }
Exemple #19
0
        public bool BuildTexturedQuads(Rectangle targetArea, out TexturedQuad[] quads)
        {
            // calc where each point is
            int left  = (int)Math.Floor((double)targetArea.Left / MatrixSquareCount1D);
            int right = (int)Math.Floor((double)targetArea.Right / MatrixSquareCount1D);

            if (targetArea.Right % MatrixSquareCount1D == 0)
            {
                right--;
            }
            int top    = (int)Math.Floor((double)targetArea.Top / MatrixSquareCount1D);
            int bottom = (int)Math.Floor((double)targetArea.Bottom / MatrixSquareCount1D);

            if (targetArea.Bottom % MatrixSquareCount1D == 0)
            {
                bottom--;
            }

            // process intersections into quads
            TexturedQuad[] temp      = new TexturedQuad[(right - left) * (bottom - top)];
            int            tempCount = 0;

            for (int x = left; x <= right; x++)
            {
                for (int y = top; y < bottom; y++)
                {
                    Texture square = MatrixSquares[x][y];
                    if (square != null)
                    {
                        int bLeft   = x * MatrixSquareSize;
                        int bRight  = bLeft + MatrixSquareSize;
                        int bTop    = y * MatrixSquareSize;
                        int bBottom = bTop + MatrixSquareSize;

                        // test to see if intersects this square
                        if (targetArea.Left > bRight ||
                            targetArea.Right < bLeft ||
                            targetArea.Top > bBottom ||
                            targetArea.Bottom < bTop)
                        {
                            continue;
                        }

                        // clip original target area
                        int rLeft   = targetArea.Left < bLeft ? bLeft : targetArea.Left;
                        int rRight  = targetArea.Right > bRight ? bRight : targetArea.Right;
                        int rTop    = targetArea.Top < bTop ? bTop : targetArea.Top;
                        int rBottom = targetArea.Bottom > bBottom ? bBottom : targetArea.Bottom;

                        CustomVertex.TransformedTextured[] quad = new CustomVertex.TransformedTextured[]
                        {
                            new CustomVertex.TransformedTextured(rLeft, rTop, 1, 1, 0, 0),
                            new CustomVertex.TransformedTextured(rRight, rTop, 1, 1, 1, 0),
                            new CustomVertex.TransformedTextured(rLeft, rBottom, 1, 1, 0, 1),
                            new CustomVertex.TransformedTextured(rRight, rBottom, 1, 1, 1, 1)
                        };

                        temp[tempCount++] = new TexturedQuad(quad, square);
                    }
                }
            }

            // refactor quads array
            if (tempCount > 0)
            {
                quads = new TexturedQuad[tempCount];
                Array.Copy(temp, quads, tempCount);
                return(true);
            }
            else
            {
                quads = null;
                return(false);
            }
        }
Exemple #20
0
        public static TextureMatrixLayer[] RenderDatabaseTree(RasterDatabase.RasterDatabase db, Device device)
        {
            // setup device
            device.RenderState.ZBufferEnable = false;
            device.Indices      = null;
            device.VertexFormat = CustomVertex.TransformedTextured.Format;
            //device.Transform.World = Matrix.Identity;
            Surface rt0 = device.GetRenderTarget(0);

            // setup template quad
            CustomVertex.TransformedTextured[] tQuad = new CustomVertex.TransformedTextured[4];

            foreach (DataLayer layer in db.Layers)
            {
                RectangleGroupQuadTree tree     = db.ProduceLayerMipMap(layer, 2048);
                Texture[][]            textures = new Texture[tree.Depth][];
                for (int i = 1; i <= tree.Depth; i++)
                {
                    RectangleGroupQuadTree.GroupNode[] nodes;
                    tree.GetNodes(i, out nodes);
                    textures[i] = new Texture[nodes.Length];

                    // render each node to texture
                    int texIdx = 0;
                    foreach (RectangleGroupQuadTree.GroupNode node in nodes)
                    {
                        Texture texture = textures[i][texIdx++] = new Texture(device, node.NodeArea.Width,
                                                                              node.NodeArea.Height, 0,
                                                                              Usage.WriteOnly, Format.X8R8G8B8,
                                                                              Pool.Managed);
                        device.SetRenderTarget(0, texture.GetSurfaceLevel(0));

                        device.Clear(ClearFlags.Target, Color.Black, 1, 0);
                        device.BeginScene();

                        // draw each rectangle quad
                        foreach (DataArea area in node.Rectangles)
                        {
                            // setup quad
                            tQuad[0] = new CustomVertex.TransformedTextured(area.Area.Left, area.Area.Top, 1, 1,
                                                                            area.TexCoords.Left, area.TexCoords.Top);
                            tQuad[1] = new CustomVertex.TransformedTextured(area.Area.Right, area.Area.Top, 1, 1,
                                                                            area.TexCoords.Right, area.TexCoords.Top);
                            tQuad[2] = new CustomVertex.TransformedTextured(area.Area.Left, area.Area.Bottom, 1, 1,
                                                                            area.TexCoords.Left, area.TexCoords.Bottom);
                            tQuad[3] = new CustomVertex.TransformedTextured(area.Area.Right, area.Area.Bottom, 1, 1,
                                                                            area.TexCoords.Right, area.TexCoords.Bottom);

                            // render quad
                            device.SetTexture(0, (Texture)area.Data);
                            device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, tQuad);
                        }
                        device.EndScene();
                    }
                }
            }

            device.SetRenderTarget(0, rt0);
            device.RenderState.ZBufferEnable = true;

            return(null);
        }
        public static TextureMatrixLayer[] RenderDatabaseTree(RasterDatabase.RasterDatabase db, Device device)
        {
            // setup device
            device.RenderState.ZBufferEnable = false;
            device.Indices = null;
            device.VertexFormat = CustomVertex.TransformedTextured.Format;
            //device.Transform.World = Matrix.Identity;
            Surface rt0 = device.GetRenderTarget(0);

            // setup template quad
            CustomVertex.TransformedTextured[] tQuad = new CustomVertex.TransformedTextured[4];

            foreach(DataLayer layer in db.Layers)
            {
                RectangleGroupQuadTree tree = db.ProduceLayerMipMap(layer, 2048);
                Texture[][] textures = new Texture[tree.Depth][];
                for (int i = 1; i <= tree.Depth; i++)
                {
                    RectangleGroupQuadTree.GroupNode[] nodes;
                    tree.GetNodes(i, out nodes);
                    textures[i] = new Texture[nodes.Length];

                    // render each node to texture
                    int texIdx = 0;
                    foreach (RectangleGroupQuadTree.GroupNode node in nodes)
                    {
                        Texture texture = textures[i][texIdx++] = new Texture(device, node.NodeArea.Width,
                                                                              node.NodeArea.Height, 0,
                                                                              Usage.WriteOnly, Format.X8R8G8B8,
                                                                              Pool.Managed);
                        device.SetRenderTarget(0, texture.GetSurfaceLevel(0));

                        device.Clear(ClearFlags.Target, Color.Black, 1, 0);
                        device.BeginScene();

                        // draw each rectangle quad
                        foreach (DataArea area in node.Rectangles)
                        {
                            // setup quad
                            tQuad[0] = new CustomVertex.TransformedTextured(area.Area.Left, area.Area.Top, 1, 1,
                                                                            area.TexCoords.Left, area.TexCoords.Top);
                            tQuad[1] = new CustomVertex.TransformedTextured(area.Area.Right, area.Area.Top, 1, 1,
                                                                            area.TexCoords.Right, area.TexCoords.Top);
                            tQuad[2] = new CustomVertex.TransformedTextured(area.Area.Left, area.Area.Bottom, 1, 1,
                                                                            area.TexCoords.Left, area.TexCoords.Bottom);
                            tQuad[3] = new CustomVertex.TransformedTextured(area.Area.Right, area.Area.Bottom, 1, 1,
                                                                            area.TexCoords.Right, area.TexCoords.Bottom);

                            // render quad
                            device.SetTexture(0, (Texture)area.Data);
                            device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, tQuad);
                        }
                        device.EndScene();
                    }
                }
            }

            device.SetRenderTarget(0, rt0);
            device.RenderState.ZBufferEnable = true;

            return null;
        }
        public bool BuildTexturedQuads(Rectangle targetArea, out TexturedQuad[] quads)
        {
            // calc where each point is
            int left = (int)Math.Floor((double)targetArea.Left / MatrixSquareCount1D);
            int right = (int)Math.Floor((double)targetArea.Right / MatrixSquareCount1D);
            if (targetArea.Right % MatrixSquareCount1D == 0)
                right--;
            int top = (int)Math.Floor((double)targetArea.Top / MatrixSquareCount1D);
            int bottom = (int)Math.Floor((double)targetArea.Bottom / MatrixSquareCount1D);
            if (targetArea.Bottom % MatrixSquareCount1D == 0)
                bottom--;

            // process intersections into quads
            TexturedQuad[] temp = new TexturedQuad[(right - left) * (bottom - top)];
            int tempCount = 0;
            for (int x = left; x <= right; x++)
            {
                for (int y = top; y < bottom; y++)
                {
                    Texture square = MatrixSquares[x][y];
                    if (square != null)
                    {
                        int bLeft = x * MatrixSquareSize;
                        int bRight = bLeft + MatrixSquareSize;
                        int bTop = y * MatrixSquareSize;
                        int bBottom = bTop + MatrixSquareSize;

                        // test to see if intersects this square
                        if (targetArea.Left > bRight ||
                            targetArea.Right < bLeft ||
                            targetArea.Top > bBottom ||
                            targetArea.Bottom < bTop)
                            continue;

                        // clip original target area
                        int rLeft = targetArea.Left < bLeft ? bLeft : targetArea.Left;
                        int rRight = targetArea.Right > bRight ? bRight : targetArea.Right;
                        int rTop = targetArea.Top < bTop ? bTop : targetArea.Top;
                        int rBottom = targetArea.Bottom > bBottom ? bBottom : targetArea.Bottom;

                        CustomVertex.TransformedTextured[] quad = new CustomVertex.TransformedTextured[]
                        {
                            new CustomVertex.TransformedTextured(rLeft, rTop, 1, 1, 0, 0),
                            new CustomVertex.TransformedTextured(rRight, rTop, 1, 1, 1, 0),
                            new CustomVertex.TransformedTextured(rLeft, rBottom, 1, 1, 0, 1),
                            new CustomVertex.TransformedTextured(rRight, rBottom, 1, 1, 1, 1) 
                        };

                        temp[tempCount++] = new TexturedQuad(quad, square);
                    }
                }
            }

            // refactor quads array
            if (tempCount > 0)
            {
                quads = new TexturedQuad[tempCount];
                Array.Copy(temp, quads, tempCount);
                return true;
            }
            else
            {
                quads = null;
                return false;
            }
        }
Exemple #23
0
        public void Render()
        {
            try
            {
                bool fog_state = CGameEngine.Device3D.RenderState.FogEnable;

                CGameEngine.Device3D.RenderState.FogEnable = false;

                CustomVertex.TransformedTextured[] data = new CustomVertex.TransformedTextured[4];
                data[0].X  = 0.0f;
                data[0].Y  = 0.0f;
                data[0].Z  = 1.0f;
                data[0].Tu = 0.0f;
                data[0].Tv = 0.0f;
                data[1].X  = CGameEngine.Device3D.Viewport.Width;
                data[1].Y  = 0.0f;
                data[1].Z  = 1.0f;
                data[1].Tu = 1.0f;
                data[1].Tv = 0.0f;
                data[2].X  = 0.0f;
                data[2].Y  = CGameEngine.Device3D.Viewport.Height;
                data[2].Z  = 1.0f;
                data[2].Tu = 0.0f;
                data[2].Tv = 1.0f;
                data[3].X  = CGameEngine.Device3D.Viewport.Width;
                data[3].Y  = CGameEngine.Device3D.Viewport.Height;
                data[3].Z  = 1.0f;
                data[3].Tu = 1.0f;
                data[3].Tv = 1.0f;

                m_vb.SetData(data, 0, 0);

                CGameEngine.Device3D.SetStreamSource(0, m_vb, 0);
                CGameEngine.Device3D.VertexFormat = CustomVertex.TransformedTextured.Format;

                // Set the texture
                CGameEngine.Device3D.SetTexture(0, m_Background.GetTexture());

                // Render the screen background
                CGameEngine.Device3D.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);

                // Set diffuse blending for alpha set in vertices.
                CGameEngine.Device3D.RenderState.AlphaBlendEnable = true;
                CGameEngine.Device3D.RenderState.SourceBlend      = Blend.SourceAlpha;
                CGameEngine.Device3D.RenderState.DestinationBlend = Blend.InvSourceAlpha;

                // Enable alpha testing (skips pixels with less than a certain alpha.)
                if (CGameEngine.Device3D.DeviceCaps.AlphaCompareCaps.SupportsGreaterEqual)
                {
                    CGameEngine.Device3D.RenderState.AlphaTestEnable = true;
                    CGameEngine.Device3D.RenderState.ReferenceAlpha  = 0x08;
                    CGameEngine.Device3D.RenderState.AlphaFunction   = Compare.GreaterEqual;
                }
                // copy on the buttons
                foreach (ImageButton button in m_buttons)
                {
                    button.HoverTest(m_MousePoint);
                    if (m_bMouseIsDown && !m_bMouseWasDown)
                    {
                        button.ClickTest(m_MousePoint);
                    }

                    button.Render();
                }
                m_bMouseWasDown = m_bMouseIsDown;

                // draw cursor
                Rectangle mouserect = new Rectangle(m_MousePoint, m_Cursor.GetSize());
                try
                {
                    data[0].X  = (float)mouserect.X;
                    data[0].Y  = (float)mouserect.Y;
                    data[0].Z  = 0.0f;
                    data[0].Tu = 0.0f;
                    data[0].Tv = 0.0f;
                    data[1].X  = (float)(mouserect.X + mouserect.Width);
                    data[1].Y  = (float)mouserect.Y;
                    data[1].Z  = 0.0f;
                    data[1].Tu = 1.0f;
                    data[1].Tv = 0.0f;
                    data[2].X  = (float)mouserect.X;
                    data[2].Y  = (float)(mouserect.Y + mouserect.Height);
                    data[2].Z  = 0.0f;
                    data[2].Tu = 0.0f;
                    data[2].Tv = 1.0f;
                    data[3].X  = (float)(mouserect.X + mouserect.Width);
                    data[3].Y  = (float)(mouserect.Y + mouserect.Height);
                    data[3].Z  = 0.0f;
                    data[3].Tu = 1.0f;
                    data[3].Tv = 1.0f;

                    m_vb.SetData(data, 0, 0);

                    CGameEngine.Device3D.SetStreamSource(0, m_vb, 0);
                    CGameEngine.Device3D.VertexFormat = CustomVertex.TransformedTextured.Format;

                    // Set the texture
                    CGameEngine.Device3D.SetTexture(0, m_Cursor.GetTexture());

                    // Set diffuse blending for alpha set in vertices.
                    CGameEngine.Device3D.RenderState.AlphaBlendEnable = true;
                    CGameEngine.Device3D.RenderState.SourceBlend      = Blend.SourceAlpha;
                    CGameEngine.Device3D.RenderState.DestinationBlend = Blend.InvSourceAlpha;

                    // Enable alpha testing (skips pixels with less than a certain alpha.)
                    if (CGameEngine.Device3D.DeviceCaps.AlphaCompareCaps.SupportsGreaterEqual)
                    {
                        CGameEngine.Device3D.RenderState.AlphaTestEnable = true;
                        CGameEngine.Device3D.RenderState.ReferenceAlpha  = 0x08;
                        CGameEngine.Device3D.RenderState.AlphaFunction   = Compare.GreaterEqual;
                    }
                    // Render the face
                    CGameEngine.Device3D.DrawPrimitives(PrimitiveType.TriangleStrip, 0, 2);
                }
                catch (DirectXException d3de)
                {
                    Console.AddLine("Unable to display cursor ");
                    Console.AddLine(d3de.ErrorString);
                }
                catch (Exception e)
                {
                    Console.AddLine("Unable to display cursor ");
                    Console.AddLine(e.Message);
                }

                CGameEngine.Device3D.RenderState.FogEnable = fog_state;
            }
            catch (DirectXException d3de)
            {
                Console.AddLine("Error rendering Option Screen ");
                Console.AddLine(d3de.ErrorString);
            }
            catch (Exception e)
            {
                Console.AddLine("Error rendering Option Screen ");
                Console.AddLine(e.Message);
            }
        }