Jan 04

XBox 360 Controller in C# per SharpDX ansprechen

Xbox360-ControllerIm Zuge des Steam Winter Sale habe ich mich mit ein paar kleinen Gelegenheitsspielen für das kommende Jahr eingedeckt. Viel Zeit dafür ist zwar neben Arbeit und Studium nicht mehr, die ein oder andere Viertelstunde lässt sich dafür aber gerne entbehren. Neben den Spielen habe ich mir auch einen XBox 360 Controller für den PC bestellt. Der PC ist nämlich sowieso schon per Hdmi mit dem Fernseher verbunden. Zusammen mit dem Controller und Steam wird daraus dann eine kleine, leistungsstarke Console. Was mich aber neben dem Spielen selbst auch noch interessiert hat, ist, wie man den Controller auch für andere Sachen nutzen kann. Kurzerhand habe ich mir die XInput Schnittstelle angeschaut, mit der der Controller angesprochen werden kann.. und bin überrascht, wie einfach diese gestrickt ist. Weiterlesen

Jan 01

Einfacher Media Player mit C# und der Windows Media Foundation #2

ScreenshotIn meinem letzten Blogeintrag habe ich meine ersten Gehversuche mit der Media Foundation (MF) beschrieben. Herausgekommen ist ein einfacher Media Player.. und wenig wieder verwendbarer Code. Aus diesem Grund habe ich etwas aufgeräumt und eine Komponente daraus entwickelt, über die relativ einfach ein kleiner Video Player in eine Windows.Forms basierte Anwendung integriert werden kann. Die Details der MF-API liegen dabei vollständig in dieser Komponente und sind für den Verwender der Komponente schlicht nicht sichtbar. In diesem Blogeintrag stelle ich die Komponente kurz vor, als was sie macht, welche Schnittstelle sie bereitstellt usw. Weiterlesen

Dez 28

Einfacher Media Player mit C# und der Windows Media Foundation

Screenshot vom PlayerSeit kurzem beschäftige ich mich nebenbei mit der Windows Media Foundation (MF). Im Grunde geht es mir darum, einen relativ einfachen Weg zu haben, Videos wiederzugeben und Videos zu erzeugen. Für Ersteres ist die MF nicht zwingend notwendig, klar, für Letzteres aber schon. Konkret hätte ich im Kopf, aus einer eigenen 3D-Engine heraus selbst ohne Zusatzsoftware ein Video aufzunehmen und z. B. auf die Festplatte zu schreiben. Davon bin ich im Moment aber selbstverständlich noch ein paar Wochen bis Monate entfernt ^^. Weiterlesen

Okt 10

Mausklick in Win.Forms per Reactive Extensions abfragen

Die Reactive Extensions von Microsoft können schon ein cooles Werkzeug sein. Wer sich schon einmal damit beschäftigt hat, weiß, dass dieses Framework vom Funktionsumfang her eine sehr gute Ergänzung ist, von der Syntax her aber sehr ungewohnt.

Ein gutes Beispiel dafür habe ich neulich bei einem relativ einfachen Thema gemacht: Einen einfachen Mausklick in einem Windows.Forms Panel abfangen. Das Standard-Ereignis konnte ich nicht nehmen, da dieses auch dann feuert, wenn die Maustaste länger unten gehalten wurde. In diesem Fall möchte ich das Ereignis aber nicht, da länger gedrückte Maustaste in diesem Fall eine andere Bedeutung hat. Weiterlesen

Okt 05

Shader debuggen mit Visual Studio 2012

Analyse eines Frames in VS 2012Aktuell bin ich dabei, verschiedene Shader-Effekte wie z. B. Blur, Grayscale, Pixel-Lightning usw. zu entwickeln. Schwierig ist dabei eigentlich immer, Fehler in den Shadern zu finden. Was macht man als Anfänger? Man geht her, programmiert den Shader in Visual Studio, kompiliert diesen und bindet ihn in das Programm ein. Das Ergebnis ist dann meistens erst einmal nicht das, was man erwartet. Und dann? Tja, im Hlsl-Coding nach dem möglichen Fehler suchen, ausbessern, wieder kompilieren und dann wieder schauen. Und so geht das eine ganze Weile weiter.. dabei kann man diesen Ablauf in Visual Studio mittlerweile wesentlich produktiver gestalten. Weiterlesen

Jul 14

ConstantBuffer Updates sind nicht trivial

LogoEin Thema, was mich zurzeit sehr beschäftigt, ist der korrekte Umgang mit dem ConstantBuffer in Direct3D 11. Der Constant Buffer wird dafür verwendet, um einem Shader fixe Parameter zu übergeben. Diese Parameter sind bei Mosaic Snake 3D etwa die aktuelle Transformation, die Lichtfarbe, die Lichtstärke und noch ein paar andere. Der Ansatz, neue Werte in den ConstantBuffer zu schreiben, ist bei Mosaic Snake 3D dabei relativ primitiv: Es gibt einen CosntantBuffer über das gesamte Programm. Jedes Mal, wenn ein Objekt (z. B. ein Teil der Schlange) gezeichnet wird, wird der ConstantBuffer vorher mit den aktuellen Informationen überschrieben und danach wird gerendert. Bei diesem Spiel hat der Ansatz auch sehr gut funktioniert, allerdings ergeben Tests in einem anderen Szenario ein ganz anderes Bild… Weiterlesen

Jun 20

RK Mosaic Snake 3D ist jetzt im Windows Store!

MosaicSnakeThumbnailEs hat jetzt eine ganze Weile gedauert, aber schließlich hat es doch noch geklappt. Das Spiel hat die Tests bei Microsoft überstanden und ist jetzt unter folgender Adresse im Windows Store erhältlich: http://apps.microsoft.com/…

Was es alles für Probleme gab, kann man z. T. auf meinem Post bei www.indiedev.de nachlesen. Davor gab es aber auch noch eine ganze Reihe anderer. An dieser Stelle bleibt mir aber nur noch eins zu sagen: Probiert es aus, habt Spaß dabei und schreibt mir bei Kritik 😉

Jun 17

Inhalt der RenderTarget-Textur in ein Bitmap kopieren

datastreamIm Moment beschäftige ich mich damit, ein kleines Unittest ähnliches Tool für eine 3D-Engine zu schreiben. Funktionsweise ist relativ einfach: Es wird eine Textur angelegt, in die ganz normal gerendert werden kann. Nach Abschluss des Render-Vorgangs soll der Inhalt der Textur in den Hauptspeicher, z. B. als normale Bitmap geladen werden (ob jetzt WPF oder System.Drawing ist egal..). Dieses entstandene Bild kann man jetzt nutzen, um zu prüfen, ob diverse Render-Schritte korrekt funktioniert haben. So weit, so gut, dass soll dann gar nicht weiter Teil dieses Beitrags sein. Mit was ich mich hier beschäftigen will, ist der Weg, wie man den Inhalt einer Textur von der Grafikkarte in den Hauptspeicher bekommt. Weiterlesen

Jun 09

Bessere PropertyGrids in Wpf durch PropertyTools

2013-06-09-PIC-03Das klassische PropertyGrid kennt wohl jeder Entwickler. Bekannt durch das „Properties“-Fenster in VisualStudio oder einfach als sehr produktives Control in Windows.Forms, um schnell eine Benutzeroberfläche für eigene Objekte erzeugen zu lassen. Daneben gibt es ein ähnliches Control in den meisten Control-Frameworks, welche man dazukaufen kann (z. B. von DevExpress). Neulich bin ich auf ein OpenSource-Projekt auf Codeplex gestoßen, welches in meinen Augen die eine oder andere Sache besser und hübscher macht. Weiterlesen

Jun 02

Initialisieren von Direct3D und mehrere Grafikkarten in einem PC

2013-01-WPF3DMessezeit ist fürs erste rum, die meisten der Prüfungen sind geschrieben. Jetzt wird es Zeit, hier wieder einige Themen zu diskutieren. Neulich stand ich wieder vor der Frage, wie man bei einer „frischen“ 3D-Engine Direct3D initialisiert bzw. ganz allgemein die Device-Instanzen verwaltet. Mittlerweile ist die API zwar einfacher, das Thema meiner Meinung nach aber komplexer geworden. Hat man ein Windows.Forms Control als Render-Ziel, so hat man i. d. R. keine großen Probleme. Steckt man aber etwa in einem Szenario, in welchen man 3D-Grafik eines Direct3D 11 Renderers in WPF einbinden möchte, so muss man schon Ressourcen von Direct3D 9 und Direct3D 11 verwenden, da WPF selbst nur Ressourcen von Direct3D 9 einbinden kann. Will man jetzt noch per Direct2D direkt auf Texturen zeichnen, so sind – aber auch nur auf der Windows 7 Plattform – zusätzlich Ressourcen von Direct3D 10 notwendig. Weiterlesen