Grafikspeicher bremst?
-
Nein der Speicherzugriff ist gut - solange man nicht abwechselnd schreibt/list (was für Transparenz ja unerlässlich ist) - Darum schreibe ich nur ins vram und lese von sysram (andersrum geht nicht!!!!). Da soll man blos die Logik finden weshalb eines besser als das andere funktioniert...
-
mein compiler würde sowas daraus machen:
... int dummybuffer[2]; //nur so test rgb1=buffer1[count-1]; r1=((rgb1 >> 16) & 0xFF); g1=((rgb1 >> 8) & 0xFF); b1=(rgb1 & 0xFF); rgb2=buffer2[count-1]; r2=((rgb2 >> 16) & 0xFF); g2=((rgb2 >> 8) & 0xFF); b2=(rgb2 & 0xFF); r3=(r1+r2)/2; g3=(g1+g2)/2; b3=(b1+b2)/2; rgb3=(r3 << 16) + (g3 << 8) + b3; dummybuffer[0]=rgb3; //nur so zum spaß - ist noch schnell }; ...
und da würde ich mich nicht wundern wenn es schnell ist...
will dir damit nur sagen, das ist c und kein assembler, du weißt nicht was der compiler daraus wirklich macht und wenn du benchmarks erstellst und jedesmal einen anderen code hast, dann kannst du nicht 100%ig behaupten es lege am spiecher ohne dir das assemblat anzuschauen... das müßtest du dir mit gcc eigentlich ausgeben lassen können.
aber wenn du jedes frame in grafikkarten buffern fummelst, dann wirst du eh nicht wirklich performance bekommen. wenn es geht sollte man da bessere wege finden.
rapso->greets();
-
Also sind jetzt alle Fragen geklärt?
Bye, TGGC
-
will dir damit nur sagen, das ist c und kein assembler, du weißt nicht was der compiler daraus wirklich macht und wenn du benchmarks erstellst und jedesmal einen anderen code hast, dann kannst du nicht 100%ig behaupten es lege am spiecher ohne dir das assemblat anzuschauen...
Klar, wenn ich z.B. alle Werte in 1 Variable speicher, dann kann theoretisch der Compiler die FOR-Schleife einfach rausoptimieren - macht der aber nicht da die Geschw. bei dummyarray[2] und dammyarray[3] gleich wäre... Zudem habe ich keine kostante Werte (woher soll der Compiler wissen wie breit/hoch das jedes mal ist?) ASM kann ich nicht...
aber wenn du jedes frame in grafikkarten buffern fummelst, dann wirst du eh nicht wirklich performance bekommen. wenn es geht sollte man da bessere wege finden.
O_o also soll ich garnicht mehr in grafikbuffer fummeln?
Also sind jetzt alle Fragen geklärt?
Naja ich gebe am besten einfach auf... Sind wohl höhere Mächte am Werk...
-
TS1234 schrieb:
O_o also soll ich garnicht mehr in grafikbuffer fummeln?
Richtig.
-
Ja - aber wie soll ich dann pixel lesen/schreiben???
-
Nur mit der GPU, die CPU ist für sowas nunmal nicht geeignet.
Bye, TGGC
-
Sag mir dann wie ich transparenz mit GPU reinrechnen kann... 2D
-
entweder zweite textur beim zeichnen verwenden in der der alpha ist, oder mittels "render to texture" den alpha einrechnen oder mit pixelshader den alpha einrechnen oder mittels registercombiner bzw. renderstages aus dem color den alpha erzeugen oder es irgendwie emulieren oder es lassen... falls du performance möchtest.
jedes frame buffer zu schaufeln ist jedenfalls nicht die richtige methode wenn es auf leistung ankommt... auch wenn du das in irgendwelchen alten engines soetwas lernen kannst. outdated.rapso->greets();
-
Falls die Alpha bei einem Bild immer dieselbe ist, kannst du sie auch einfach in dessen Alphakanal tun. Und alle Ergebnisse der GPU sind letztendlich 2D.
Bye, TGGC
-
entweder zweite textur beim zeichnen verwenden in der der alpha ist, oder mittels "render to texture" den alpha einrechnen
Ich hab ja keine textur, sondern images - ich bezweifle stark, dass in DX2D sowas möglich ist...
oder mit pixelshader den alpha einrechnen oder mittels registercombiner bzw.
ist mir zu hoch
jedes frame buffer zu schaufeln ist jedenfalls nicht die richtige methode wenn es auf leistung ankommt...
Was heißt hier schaufeln??? Buffer bleiben immer wo die sind...
Naja bei 256x256 bei 50:50 habe ich leider nur 180fps auf meinem system - andere haben ~1000fps... Klar ist etwas lahm (bei mir). Aber ich habe keinen plan wie ich mit DLL die GPU überhaupt erst ansprechen soll... Ich code an sich in Basic - und nur DLL in c++