Assembler

Ich denke darüber nach den Wasser Effekt für KWin zu implementieren. Da Compiz so einen Effekt hat, dachte ich mir: schau doch mal in denen ihren Code und schau dir an wie die das machen. Mir ist klar, dass ich einen Shader brauche und Compiz auch einen benutzen muss. Im besten Fall wäre es also möglich den Shader eins zu eins zu übernehmen und den Effekt recht schnell zu haben.

Also in das Quellcodeverzeichnis gegangen und nach einem Shader gesucht. Kann aber keine Shader Datei finden. Da sind überall nur c-Dateien. Schaut man halt in die c-Datei um den Pfad zum Shader zu finden – muss ja schließlich zur Laufzeit geladen werden. Und was stellt man fest? Der Shader ist in Assembler direkt im Quellcode geschrieben! Assembler! Kein Shader in der OpenGL Shading Language. Also keine Möglichkeit den Shader wiederzuverwenden, nein ich kann den Code nicht mal lesen. Wirklich Schade. Es gibt eine Hochsprache dafür und Compiz verwendet Assembler. Ich möchte hier jetzt Compiz nicht kritisieren. Es ist durchaus denkbar, dass zu dem Zeitpunkt als der Effekt geschrieben wurde, man Shader noch in Assembler schreiben musste.

Kugel mit Caps

Nachdem ich eine Woche nicht daran hab arbeiten können, da der Ati Chip in meinem Laptop keine Shader unterstützt, hab ich mich heute wieder an die Kugel gemacht und konnte die Caps fertigstellen. Wird auch langsam Zeit: übermorgen ist Code Freeze für die Abgabe bei Summer of Code. Das Ergebnis sieht nun so aus:

Die Kugel wurde etwas nach hinten vorschoben um vollständig auf den Monitor zu passen und die Spiegelung wurde deaktviert, da sie mit der unteren Cap überschneiden würde. Kugel und auch Zylinder können übrigens nicht verwendet werden um den Wechsel der Arbeitsfläche zu animieren. Dafür gibt es nur den Würfel. Alles andere würde das Bild bei einer Animation von ca. einer halben Sekunde zu stark stören.

Leider sind meine Versuche Zylinder und Kugel andere Tastenkürzel zu geben erst einmal gescheitert. Irgendwie scheint mir die Vererbung in C++ doch nicht so ausgereift zu sein wie in Java. Eigentlich ja nicht überraschend, da C++ ja auch gelinkt werden muss. Da die Tastenkürzel im Konstruktor festgelegt werden und der Konstruktor von Cube als Elternklasse zuerst ausgeführt wird, hat auch Zylinder und Kugel dessen Tastenkürzel reserviert. Daher bleibt es vorerst dabei, dass man Cube nicht starten kann, wenn Zylinder oder Kugel aktiviert ist. Die Einstellungen sollten sich jedoch noch ändern lassen. Werde ich mir morgen mal anschauen ;-)

aKademy vorbei

Es war eine tolle Woche und leider ging sie viel zu schnell vorbei. Aber man freut sich schon auf nächstes Jahr in Gran Canaria zusammen mit den Leuten von Gnome. Fällt leider voll in die Klausuren- und Lernphase.

Die KDE Community ist einfach umwerfend. Alle Leute sind super nett. Generell war es riesig. Wir 350 Leute haben ja nicht mal mehr auf das Gruppenfoto gepasst, daher hab ich mich auch noch nicht darauf entdeckt.

Die ersten zwei Tage waren geprägt von Konferenzen. Sehr viele Talks und Keynotes. Die meisten richtig interessant und manchmal gab es auch zwei Talks die ich gerne gleichzeitig gehört hätte. Zum Glück wurde aufgezeichnet ;-) Sehr interessant war natürlich die Keynote von Nokia, unseren neuen besten Freunden. Für die, die es nicht wissen: Nokia hat am Anfang des Jahres Trolltech übernommen und ist nun die Firma hinter Qt und somit KDEs wichtigster Partner. Von der Keynote her denke ich nun noch mehr, dass Nokia sich der Verantwortung gegenüber KDE bewusst ist und das Verhältnis noch weiter ausbauen will und KDE stärker fördern wird. Wäre natürlich sehr erfreulich.

Zwischen den Talk wurden auch die aKademy Awards verliehen. Ich denke Amarok, Oxygen und Aaron Seigo für Plasma sind passende Gewinner für diese Auszeichnungen. Amarok ist einfach eine geile Anwendung, Oxygen ist mit das schönste was ich je auf dem freien Desktop gesehen habe und Aaron hat die Auszeichnung für seine Arbeit und seine Ideen an Plasma durchaus verdient.

Am Samstag Abend war das Social Event in einer Brauerei mit Freibier gesponsort von Nokia. Hier hatte man so richtig die Gelegenheit neue KDE-ler kennenzulernen und sich mit ihnen über ihre Projekte und Arbeit auszutauschen. Um es einfacher zu machen hatte jeder KDE-ler ein Namensschild umhängen. Sonntag morgen waren die ersten Vorträge doch etwas träge. Eigentlich verständlich bei Bier mit 9 % – und keiner hat uns gewarnt ;-)

Montag war die Hauptversammlung des KDE e.V. Das hat die meisten aKademy Teilnehmer beschäftigt. Da ich kein Mitglied bin, durfte ich nicht hingehen und habe mich stattdessen dem Coding gewidtmet. Es ist auch ein bißchen was darbei herumgekommen ;-)

Dienstag war der Thementag zu Mobile Devices. Dieser stand natürlich unter dem Einfluss der 100 N810 die Nokia an die KDE Entwickler verschenkt hatte. Die Akkus waren zum Glück schon geladen und die Mac Adressen waren in der Firewall freigeschaltet. So kam es, dass man den ganzen Tag über Leute über ihr neues Spielzeug gebeugt gesehen hatte, die ihre ersten Gehversuche mit Gnome machen. Bin ja mal gespannt, was die Community für diese Geräte leisten wird. Denke aber mal schon, dass es bald die ersten KDE 4 Pakete für Maemo geben wird. Wäre schön. Natürlich müssen die Anwendungen auch ein bißchen angepasst werden. Aber das sollte ja nicht so schwer sein. Ich weiß noch nicht, ob das Gerät einen 3D-Chip hat, daher hab ich noch keine Ahnung ob meine Effekte laufen werden ;-)

Am Dienstag konnte ich mich auch einmal mit meinem GSoC Mentor und KWin Maintainer (wer Planetkde liest: der mit den blauen Haaren) zusammensetzen und über unsere Pläne für 4.2 reden. War meiner Meinung nach ein sehr fruchtbares Gespräch und ich werde mich nun stärker in KWin einarbeiten und mich auch mal mit den Bereichen abseits der Effekte beschäftigen.

Die letzen Tage waren geprägt von Hackathon und BoF Sessions. Ich selber habe keine der BoFs besucht. Wollte zu Usability gehen, aber Essen hatte länger gedauert als erwartet und als ich ankam war der Raum bereits überfüllt. Daher habe ich ein bißchen programmiert. Present Windows Effekt (aka Expose) ist nun ein Window Switcher (Alt+Tab). Ist sehr praktisch, da er sehr gut skaliert für eine große Anzahl von Fenstern. Ob ich ihn selber in 4.2 nutzen werde, weiß ich noch nicht, da ich meistens nur so viele Fenster offen habe, dass Coverswitch noch gut skaliert. Eine weitere Neuerung (noch nicht committed) konnte ich in den Einstellungen einbauen. Nun gibt es ein Dropdown um den Window switcher und eins für den Desktop switcher auszuwählen. Das sollte es dem User bedeutend erleichtern, den für sich perfekten Effekt zu finden ohne die Einstellungen verschiedener Effekte durchzuprobieren um herauszufinden, dass der Effekt auch als Window Switcher verwendet werden kann. Ja das zeigt: wir brauchen ein Handbuch.

Btw: ich werde wohl eine englische Kategorie einführen und meine Blogposts zu KDE in Zukunft in Englisch verfassen, da ich mehrmals gebeten wurde auch auf planetkde zu posten. Ich denke, dass ich weiterhin kurze deutsche und nicht so technische Posts schreiben werde.l

Vorfreude

  • Reisetasche gepackt
  • Laptop geupdated
  • Home Partition auf Laptop verschlüsselt
  • KDE 4.2 (trunk) wird auf Laptop gebaut
  • SSH-Schlüssel auf Laptop kopiert
  • KDE-Wallet auf Laptop kopiert

Und warum das ganze?

Und ich freue mich schon riesig. Morgen geht es endlich los. Endlich lerne ich mal richtig viele der KDE Entwickler kennen. Sehr interessante Vorträge sind geplant und auf den Hackathon freue ich mich auch schon, auch wenn programmieren auf meinem Laptop nicht wirklich Spass macht.

Lesson learned

Gestern habe ich meine Änderungen der letzten Wochen mit dem KDE SVN zusammengeführt. Unter anderem war auch meine Änderung zum Verhalten von multi-Monitor-Setups enthalten.

Bis dahin sah es so aus: ein riesiger Würfel, der über alle Monitore geht. Das war eher ein Zufallsprodukt als irgendwie geplant. Für mich war eigentlich klar, dass das falsch ist. Würfel über mehrere Monitore? Ne ergibt keinen Sinn. Mann stelle sich vor der zweite Monitor steht abgewinkelt zum ersten – das wäre ja komplett falsch. (bei mir ist es übrigens so, weil ich den zweiten Monitor irgendwo auf den Schreibtisch gequätscht habe – benutze eigentlich nur einen).

Also habe ich die meiner Meinung nach einzig praktikable Lösung umgesetzt: der Würfel wird nur auf einem Monitor gezeichnet und so skaliert, dass beide Monitore auf den Wüfel auf einem Monitor passt. Ist meines Erachten nach die einzige wirklich saubere Lösung.

Nun anscheinend gibt es User, die mir nicht zustimmen. Kurz nach dem Commit bekam ich eine E-Mail, in der ein User meinte, dass es nicht so gut wäre und heute wurde auch ein Bug dazu aufgemacht. Tja so ist das halt mit OpenSource: Änderungen werden sofort wahrgenommen.

Also werde ich den einen großen Würfel wieder implementieren und als Config-Option anbieten. Sollte kein großes Problem sein, da ich nur die Sonderbehandlung für Multi-Monitor-Setups ausschalten muss.

Es gäbe noch die Möglichkeit auf jedem Monitor einen eigenen Würfel zu zeichnen. Anscheinend macht Compiz das so. Leider will Compiz bei mir warum auch immer nicht starten und ich kann es mir daher nicht anschauen. Diese Möglichkeit wäre sehr kompliziert und würde den Code sehr unschön machen. Ich müsste an sehr vielen Stellen darauf überprüfen und das will ich natürlich nicht ;-)

Kugel

Heute morgen habe ich begonnen meinen Würfel/Zylinder in eine Kugel zu verwandeln. Da ich ja bereits einen Vertex-Shader hatte, der die Umwandlung in einen Zylinder vornimmt, muss ich also nur diesen so erweitern, dass es eine Kugel wird. Nun so langsam werde ich in Geometrie immer besser (ja ich kann noch lernen ;-) ) und die Formeln waren recht schnell erarbeitet. Die y-Koordinate muss zusätzlich noch die z-Koordinate beeinflussen (vorher war es nur die x verantwortlich) und die x-Koordinaten müssen in Abhängigkeit von der y-Koordinate gestaucht werden. Die Änderung hat gerade einmal etwa 15 Zeilen Code im Vertex-Shader benötigt. Zeigt auch mal wieder die Mächtigkeit von Shadern. So sieht der aktuelle Stand aus:

CubeCaps fehlen noch. Die muss ich für die Kugel neu programmieren. Ich hoffe aber noch eine bessere allgemeine Lösung im Würfel zu finden, so dass ich hier auch einfach den Shader drauf ansetzen kann. Mal schauen. Auch so gibt es noch ein paar kleinere unschöne Stellen. Die Ecken der Arbeitsflächen überlappen (warum auch immer) und die reklektierende Ebene ist nun zu weit oben für runde caps.

Ach bis das ganze im SVN ist, wird es auch noch ein paar Tage dauern. Ich hab ein bißchen was angeschaut und muss dass nun langsam aber sicher einspielen. Die Kugel benötigt aber zwingend einige der Änderungen.