[C#]Niskopoziomowe renderowanie grafiki.

1

Na wstępie przepraszam (znowu) za idiotyczną nazwę tematu, ale nic innego nie potrafiłem wymyślić :/

Chciałem się zapytać czy da się w C# (ewentualnie z małym wsparciem czegoś zewnętrznego) napisać własną bibliotekę graficzną? Mam na myśli (przepraszam za porównanie) coś jak DirectX czy OpenGL, tyle że do grafiki 2D - chodzi mi tylko o zapewnienie sobie dostępu do ekranu - tzn pikseli, a nie przez Graphics formy.

Za próbę pomocy dzięki... [soczek]

0

Myślę że powinno się dać dostać powierzchnię ekranu za pomocą WinApi-> getDC

Jeśli się da to już połowa sukcesu.
Graphics.FromHDC i rysujesz.

0
MSM napisał(a)

Chciałem się zapytać czy da się w C# (ewentualnie z małym wsparciem czegoś zewnętrznego) napisać własną bibliotekę graficzną? Mam na myśli (przepraszam za porównanie) coś jak DirectX czy OpenGL, tyle że do grafiki 2D - chodzi mi tylko o zapewnienie sobie dostępu do ekranu - tzn fikseli, a nie przez Graphics formy.

Raz że to już jest, właśnie w postaci klasy Graphics (do której możesz dorobić własną otoczkę), a dwa że "Graphic sformy" jak najbardziej taki dostęp daje.

No, i jest jeszcze prawdziwy DirectX, OpenGL i specjalnie .Netowe XNA.

0

MSM chodziło chyba o rysowanie "nad wszystkim"
GetDC(IntPtr.Zero) dostaniesz powierzchnie ekranu.

1

@Azarien - wydaje mi się że XNA bazuje właśnie na DX, ale mogę się mylić. A w Graphics denerwuję mnie wiele rzeczy.
@dark_astray - spróbuję tego DC.

Inna sprawa że w ogóle to nie przepadam za całym GDI i zastanawiałem się po prostu czy da się dostać do ekranu inaczej a nie przez niego...

0
MSM napisał(a)

@Azarien - wydaje mi się że XNA bazuje właśnie na DX

Tak.
Niestety, ma niemiłą przypadłość że wymaga przez kartę graficzną obsługi shaderów 2.0 - nawet jeśli nie zamierzamy z nich w ogóle korzystać, albo nawet w ogóle grafiki 3D. To uniemożliwia wykorzystanie XNA w programach, które w założeniach mają mieć minimalne wymagania sprzętowe.

0

XNA jest z założenia raczej do tworzenia gier.
A przecież w programach można tak samo używać DX/DD i chyba nie bedzie wymagac shaderów.

0

w .NET klasa Bitmap pozwala na dostęp do pamięci poprzez Bitmap::LockBits(...)/Unlock(),tutaj znajdziesz przykład zastosowania:
http://msdn.microsoft.com/en-us/library/5ey6h79d.aspx

natomiast, jeśli interesuje Cie jakakolwiek sensowna wydajność, to spokojnie możesz odpuścić sobie ten pomysł - nie napiszesz biblioteki w kodzie zarządzanym szybszej niż to co masz w Graphics, która wrapuje bibliotekę GDI+ z kodem natywnym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1