boops boops

  • Content count

  • Joined

  • Last visited

Community Reputation

101 Neutral

About boops boops

  • Rank
  1. Hi everyone, I'm making a custom control in VB.Net which provides image panning, zooming and rotation.It's working the way I like in GDI+ except that it's slow and can't deal with anything over about 4096x4096 pixels. So I decided to try rendering in DirectX instead. It's definitely zippier but there is still an upper limit on image size: now, after column/row 4095 or so, the last column/row is repeated in the render to produce stripes of colour. I gather from [url=""]this thread[/url] that the upper size limit is a long known problem. I'm a bit of a dinosaur (WinXPsp3 with DX3d10, 2GB system memory, 256MB video) so I guess I am running into the same thing. This is my first time using DirectX and I arrived at the following code by taking available examples and stripping out whatever seemed superflous. [code] Private Sub InitiateDevice() Dim pParams As New PresentParameters With {.Windowed = True, .SwapEffect = SwapEffect.Discard, .BackBufferCount = 0} _Device = New Device(0, DeviceType.Hardware, Me.Handle, CreateFlags.MixedVertexProcessing, pParams) _Device.SetRenderState(RenderStates.AlphaBlendEnable, True) _Device.RenderState.SourceBlend = Blend.SourceAlpha End Sub Private Function GetTextureFromFile(filename As String) As Texture Return TextureLoader.FromFile(_Device, filename, _ImageSize.Width, _ImageSize.Height, 0, 0, 0, Pool.Managed, Filter.Linear, Filter.Linear, 0) End Function Private Sub Render() If _Device IsNot Nothing Then Dim srcRectangle As New Rectangle(Point.Empty, _ImageSize) Dim destSize As New Size(CInt(_ImageSize.Width * _ZoomFactor), CInt(_ImageSize.Height * _ZoomFactor)) _Device.Clear(ClearFlags.Target, Me.BackColor, 0, 0) _Device.BeginScene() Using sprite As New Sprite(_Device) sprite.Begin(SpriteFlags.AlphaBlend) sprite.Draw2D(_Texture, srcRectangle, destSize, _ _RotationCentre, _Rotation, _ImageCentre, Color.White) sprite.End() End Using _Device.EndScene() _Device.Present() End If End Sub [/code] The identifiers beginning with underscores are defined at class level. I have tried variations on arguments such as Width, Height, Pool and Filter without solving the problem. Assuming there isn't something simple I need to change, can anyone recommend a better technique for handling large images (e.g. > 10K * 10K pixels) with DirectX? cheers, BB EDIT: I just found a tool called DirectX Caps Viewer which reveals that my graphics card is indeed limited to a maximum texture size of 4096 * 4096. Can I overcome this limit by dividing large images into multiple textures? If so, can anyone recommend an example?