Рендеринг на экран в VB.net - PullRequest
2 голосов
/ 24 июня 2011

Я создаю свой собственный 2D-движок.Я планировал использовать только функции рисования .net.Тем не менее, это очень медленно, и экран часто мигает.Я должен нарисовать его в окне, однако ...

Каков наилучший способ сделать это?Как бы я добавил буферы к ситуации?

1 Ответ

2 голосов
/ 24 июня 2011

Предполагается, что вы используете GDI, проблема с "миганием" экрана связана с записью непосредственно на первичную поверхность.Вы можете избежать этого, создав буфер "Bitmap", выполнив что-то вроде этого:

Bitmap buffer = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height)

Затем создайте управляемый объект "Graphics" из этого буфера,

Using gfx As Graphics = New Graphics.FromImage( buffer )

// draw with gfx object

End Using

Для отображенияобновленный обратный буфер на первичной поверхности, что-то вроде:

PrimaryGraphics.DrawImageUnscaled (buffer, 0, 0) или вы можете P / Invoke " BitBlt ", что я считаю немногобыстрее.

Если бы вы использовали C #, я бы предложил использовать «небезопасные» блоки кода для манипулирования буфером напрямую через указатели, что может значительно ускорить процесс.Тем не менее, я не верю, что VB.net их поддерживает.

Редактировать:

GDI + на самом деле не будет "молниеносно" быстрым, несмотря на то, как он реализован с использованием стандартной системыРесурсы CPU / Memory.

Вы можете использовать SlimDX , который имеет управляемую оболочку для Direct2D, аппаратно-ускоренного 2D API.Есть несколько учебных пособий , доступных для начала работы.

Edit 2:

Если вы придерживаетесь GDI, вы можете использовать "LockBits" в вашем заднем буфере, чтобы сделать некоторые "оптимизированные операции с памятью, здесь - отличная статья на эту тему.

...