GDI+ scheitert am Grid?



  • Hi,

    ich habe in mein Projekt statt der normalen GDI einfach mal die GDI+ eingebunden
    (viel mehr komfort (AntiAliasing usw.)).

    Das Problem ist aber, wenn ich ein normales Gitter aus schwarzen (nicht AA) Zeichnen will, geht die Auslastung schonmal auf 99%. wie kann ich das umgehen (denn in GDI funktioniert das Gitter super) und ich möchte wegen des Gitters nicht extra GDI benutzen.

    MoveToEx(); und LineTo(); sind zwar sehr leicht zu bedienen. Leider kann man auf die aber nicht so einfach nen Alpha Wert setzen, denn die Linien sollen auch transparent einstellbar sein.

    Ich benutze darüber hinaus einen guten Backbuffer.
    €dit: An dem es auch sicher nicht liegt!

    Code:

    for(int x=0; x<640; x+=32)
    			{
    				for(int y=0; y<480; y+=32)
    				{
    					gr.DrawLine(&pPen, x, y, x+32, y);
    					gr.DrawLine(&pPen, x, y, x, y+32);
    				}
    			}
    

    Falls die for-Schleifen falsch sind, bitte benachrichtigen, weil ich mein Projekt nur noch so im Kopf habe und es im moment nicht aufrufen kann.

    Info: gr ist eine Instanz der Klasse Graphics innerhalb des GdiPlus namespaces.
    &pPen ist einfach nur ein Pen der GdiPlus, der den ARGB-Wert (128, 0, 0, 0) hat.

    -mfg Nolf



  • Nolf schrieb:

    Das Problem ist aber, wenn ich ein normales Gitter aus schwarzen (nicht AA) Zeichnen will, geht die Auslastung schonmal auf 99%.

    du meinst die rechnerauslastung? warum sollte das ein problem sein? wenn die auslastung bei 50% begrenzt wäre, würde es auch doppelt so lange dauern die gitterlinien zu zeichnen.

    oder meinst du, dass das zeichnen zu lange dauert?

    Nolf schrieb:

    Ich benutze darüber hinaus einen guten Backbuffer.
    €dit: An dem es auch sicher nicht liegt!

    wodurch zeichnet sich denn ein guter backbuffer aus?



  • p.s.: wenn du rechnerauslastung senken willst, einfach ein Sleep(1); in eine der schleifen.



  • und:

    for(int x=0; x<640; x+=32)
        gr.DrawLine(&pPen, x, 0, x, 479);
    for(int y=0; y<480; y+=32)
        gr.DrawLine(&pPen, 0, y, 639, y);
    

    sind nur 35 DrawLine() statt 600.



  • jerry seinfeld schrieb:

    Nolf schrieb:

    Ich benutze darüber hinaus einen guten Backbuffer.
    €dit: An dem es auch sicher nicht liegt!

    wodurch zeichnet sich denn ein guter backbuffer aus?

    Dass er von mir ist :P^^

    Nein damit meine ich, dass das Ding ohne backbuffer auch so langsam ist.

    2. Mist, geschachtelte forschleifen ist mir nicht aufgefallen
    3. Das Programme die nur Linien Zeichnen auf 99% gehen ist schon merkwürdig ;X

    thx erstmal

    €dit: Naja das Ding ist trotzdem noch TOTAL langsam oO



  • vllt. wirds ja schneller wenn du Antialiasing aus schaltest - Dürfte bei nem Grid auch nicht gleich scheiße aussehen 😉



  • Das Problem ist aber, wenn ich ein normales Gitter aus schwarzen (nicht AA) Zeichnen will

    Naja das AA heißt da AntiAliasing^^

    Ich hab den Smoothing mode auf HighSpeed (also total kantige Quali eingestellt) und es ist immer noch so. Wenn GDI+ an knapp 40 Linien scheitert, dann wunderts mich, wie ich einen Editor mit stinknormaler Gitterfunktion proggen soll oO!



  • gdi+ ist arschlahm. wenn clipping ins spiel kommt ist es für echtzeit-anwendungen überhaupt nicht mehr zu gebrauchen. ein nettes interface mit mächtigen grafikfunktionen, aber für ernsthafte anwendungen viel zu langsam.



  • naja, richtig übel lahm ist es eigentlich auch nicht.
    Ich zeichne hier viel mehr als die 40 Linien und zusätzlich Text mit GDI+ (allerdings unter C#) und da ruckelt noch nichts.
    Wobei bei mir speziell das Textrendering schon lahm ist gegenüber GDI.

    GDI+ nutzt übrigens Hardware-Beschleunigung sofern verfügbar.



  • Hmm ja ok.

    Thx erstmal.
    Was soll ich denn für ein Interface (außer GDI+ und GDI) benutzen, sodass ich auch Transparenz (Alpha Channel und Alpha Wert [ARGB]) auf Bilder machen kann?

    Kennt ihr da welche?



  • directgraphics


Anmelden zum Antworten