Performance erhöhen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Performance erhöhen

Beitrag von STARGÅTE »

eine der ungeahnte Möglichkeiten ist hier zu sehen: Fraktale

Dort habe ich auch mit CustomFilterCallback() ein CallBack geschrieben der mir halt zB die Mandelbrotmenge erzeugt.
Und das nicht einfach nur so, sonden auch mit einem netten Farbeffekt.

Aber du hast recht, CustomFilterCallback() ist ein sehr mächtiges Werkzeug.

EDIT: Vorallem weil man ja nicht nur immer n BOX zeichen muss, sonden auch Texte und Schriften...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Performance erhöhen

Beitrag von DarkDragon »

Nur so nebenbei, wer mit CustomFilterCallback klarkommt kommt auch mit Shadern klar. Dadurch lässt sich das ganze noch sehr beschleunigen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: Performance erhöhen

Beitrag von PureLust »

DarkDragon hat geschrieben:Nur so nebenbei, wer mit CustomFilterCallback klarkommt kommt auch mit Shadern klar. Dadurch lässt sich das ganze noch sehr beschleunigen.
Meinst Du mit Shadern das "direkte programmieren des Grafikchips"? :o

[Edit:]
STARGÅTE hat geschrieben:Vorallem weil man ja nicht nur immer n BOX zeichen muss, sonden auch Texte und Schriften...
Jupp, da kommt mir sofort in den Sinn, dies bei der Generierung bestimmter Druckerausgaben zu verwenden, um z.B. Toner und Tinte einzusparen (also um z.B. nur jeden 2. Pixel schwarz zu machen). :allright:
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Christian H
Beiträge: 134
Registriert: 18.10.2005 10:22
Wohnort: Welschbillig

Re: Performance erhöhen

Beitrag von Christian H »

STARGÅTE hat geschrieben:Hier mal meine "Version", wie man ein Potentialfeld darstellen kann, in dem 10 Ladungen vertielt sind (positiv und negativ)
Noch einen Gamma Filter dazu und schon ist es Ästhetisch ansprechend.

Code: Alles auswählen

Enumeration
  #Window : #Gadget : #Image
EndEnumeration
#x = 64
#y = 64
Structure Ladung
  x.f : y.f : q.f
EndStructure
Global NewList Ladung.Ladung()

; Ladungen erstellen
RandomSeed(6)
For n = 1 To 10
  AddElement(Ladung())
  Ladung()\x = Random(#x) ;-20)+10
  Ladung()\y = Random(#y) ;-20)+10
  Ladung()\q = 255*(Random(1)*2-1)
Next

; Potentialfeld
Procedure Ladungen(x, y, QuellFarbe, ZielFarbe)
  Protected q.f, qi.f
  ForEach Ladung() : With Ladung()
      qi = \q / Sqr((x-\x)*(x-\x)+(y-\y)*(y-\y))
      q + qi
  EndWith : Next
  ;Debug q
  Color = RGB(0,255,0)
  If q <= 255
    If q >= 0
      Color = RGB(0,q,0)
    ElseIf q >= -255
      Color = RGB(-q,0,0)
    Else
      Color = RGB(255,0,0)
    EndIf
  EndIf
  r = Pow((  Red(Color)/255),0.5)*255
  g = Pow((Green(Color)/255),0.8)*255  
  ;b = Pow(( Blue(Color)/255),0.8)*255
  Color = RGB(r,g,b)
  ProcedureReturn Color
EndProcedure 

CreateImage(#Image, #x, #y, 24)
StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_CustomFilter)
CustomFilterCallback(@Ladungen())
Box(0,0,#x,#y)
StopDrawing()

ResizeImage(#Image, 512, 512)

SetClipboardImage(#Image)

OpenWindow(#Window, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "Image", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(#Gadget, 0, 0, ImageWidth(#Image), ImageHeight(#Image), ImageID(#Image))

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Gruß Christian

PS: @PureLust
Gammafilter und Co. sind Sinnvolle Anwendungen für CustomFilterCallback()
Antworten