SlimDX
-
Für alle, die davon noch nichts mitbekommen haben: .Net-Entwickler stehen zur Zeit ein bisschen blöd da. Auf der einen Seite gibt es das MDX für .Net 1.1, welches einige Bugs hat, reichlich unvollständig ist und, was am wichtigsten ist, schon lange nicht mehr supported wird. Auf der anderen Seite XNA, was zwar (meiner Meinung nach) ein schönes, sauberes API hat, aber unflexibel ist wegen der XBox-Kompatibilität. Als Beispiel seien hier das dynamische Erzeugen von Texturen, Fonts, ... erwähnt.
Wer nur für den PC entwickelt, für den ist SlimDX vielleicht interessant. Es handelt sich dabei um ein Open-Source Projekt, welches das komplette DirectX-API für .Net wrappt. Anscheinend ist es noch nicht völlig fertig, aber interessant sieht es IMHO schon aus.
-
Optimizer schrieb:
Als Beispiel seien hier das dynamische Erzeugen von Texturen, Fonts, ... erwähnt.
wo ist da das problem? (ich kenne mich 0 aus damit).
-
Es gibt offenbar auf der XBox nicht sowas wie einen Font-Renderer der die Schriften in verschiedener Auflösung rendern kann, wie es bei Windows-Systemen vorhanden ist. In XNA gibt es SpriteFont-Objekte, die repräsentieren eine Texturensammlung von Zeichen, die aber zur Build-Zeit erstellt werden. Wenn man so ein SpriteFont in die content pipeline aufnimmt, wird die Schrift zur Build-Zeit gerastert und als Bitmaps als Resource eingebunden.
Das ist nachteilhaft, wenn man die Schriftgröße je nach Bildschirmauflösung unterschiedlich wählen will, man müsste alle möglichen Schriftgrößen in den content aufnehmen. Ich erkläre mir das so, dass sich das Problem mit der Auflösung auf der XBox nicht stellt, die wird da nicht umgestellt.
Naja und ich stoße auch auf andere Einschränkungen, die meiner Meinung nach mit der Konsole zu tun haben. Zum Beispiel benutze ich die Windows-GDI um zur Laufzeit ein Bitmap mit nem Kreis darauf zu zeichnen. Dann sag ich new Texture(myBitmap) und gut ist.
Sowas ist in XNA scheinbar nicht vorgesehen, weil es wohl auf der XBox kein GDI gibt. Natürlich wäre es wohl irgendwie möglich, dynamisch eine Textur mit Kreis zu erstellen, aber es macht keinen Spaß. Warum der Aufwand, wenn ich unter Windows schreibe: new Bitmap(), DrawCircle(), new Texture(). 
Jetzt ist es bei XNA halt so, dass man die Einschränkungen der XBox auch hat, wenn man für den PC entwickelt. Also ich find's jedenfalls nicht geil. Ich möchte nicht sagen, dass solche Dinge unmöglich sind (wär ja sehr traurig), aber unnötig aufwändig. Dann fehlen für mich praktische API-Funktionen von Direct3D, zum Beispiel Mesh.Intersect(Ray) für polygongenaue Kollisionserkennung. Noch etwas, worauf ich nur begrenzt Lust habe, es selber zu schreiben.
-
Optimizer schrieb:
Ich erkläre mir das so, dass sich das Problem mit der Auflösung auf der XBox nicht stellt, die wird da nicht umgestellt.
Ich habe keine, aber was passiert denn, wenn ich ein Spiel mal an einem HD-Fernseher mit 720p oder 1080p spiele und dann an einem alten Fernseher mit ganz normaler PAL-Auflösung?
-
Optimizer schrieb:
Es gibt offenbar auf der XBox nicht sowas wie einen Font-Renderer der die Schriften in verschiedener Auflösung rendern kann, wie es bei Windows-Systemen vorhanden ist. In XNA gibt es SpriteFont-Objekte, die repräsentieren eine Texturensammlung von Zeichen, die aber zur Build-Zeit erstellt werden. Wenn man so ein SpriteFont in die content pipeline aufnimmt, wird die Schrift zur Build-Zeit gerastert und als Bitmaps als Resource eingebunden.
das ist wirklich ok, wie ich dir schon vor ein paar jahren gesagt hatte, werden resourcen vom rest seperat bearbeitet und so fuers spiel bereitgestellt. zur laufzeit wuerde man das hoechstens aus optimierungsgruenden machen (z.b. speicherverbrauch oder cachoptimierung indem man alles unnoetige rausschmeisst).
Das ist nachteilhaft, wenn man die Schriftgröße je nach Bildschirmauflösung unterschiedlich wählen will, man müsste alle möglichen Schriftgrößen in den content aufnehmen.
es gibt doch nur 3 oder 4 aufloesungen, oder? zudem kann man auch ruhig immer die selbe font-textur rasterizen, wenn AA an war und man bilinear gefiltert sowas darstellt, sollte das nicht so ein grosses problem sein.
Ich erkläre mir das so, dass sich das Problem mit der Auflösung auf der XBox nicht stellt, die wird da nicht umgestellt.
das kann natuerlich sein, jedoch hast du immer das problem mit aufloesungswechseln z.b. pixelgenaue gui.
Naja und ich stoße auch auf andere Einschränkungen, die meiner Meinung nach mit der Konsole zu tun haben. Zum Beispiel benutze ich die Windows-GDI um zur Laufzeit ein Bitmap mit nem Kreis darauf zu zeichnen. Dann sag ich new Texture(myBitmap) und gut ist.
das machst du nicht, sag dass du das nicht machst und es ein scherz war*hehe*
Sowas ist in XNA scheinbar nicht vorgesehen, weil es wohl auf der XBox kein GDI gibt. Natürlich wäre es wohl irgendwie möglich, dynamisch eine Textur mit Kreis zu erstellen, aber es macht keinen Spaß. Warum der Aufwand, wenn ich unter Windows schreibe: new Bitmap(), DrawCircle(), new Texture().

es gibt tausend gruende ordentlich zu programmieren ohne solche hacks

Jetzt ist es bei XNA halt so, dass man die Einschränkungen der XBox auch hat, wenn man für den PC entwickelt. Also ich find's jedenfalls nicht geil. Ich möchte nicht sagen, dass solche Dinge unmöglich sind (wär ja sehr traurig), aber unnötig aufwändig. Dann fehlen für mich praktische API-Funktionen von Direct3D, zum Beispiel Mesh.Intersect(Ray) für polygongenaue Kollisionserkennung. Noch etwas, worauf ich nur begrenzt Lust habe, es selber zu schreiben.
gibt es nicht bald irgendwie was mit XNA 2 oder so?
btw. offtopic aber: wie waere es wenn du dein stonage mal im engine/demo thread vorstellst, oder zumindestens im screenshot thread mal was neues zeigst?
so exklusiv fuer uns:)ich kann es mir ja nichts aktuelles mehr ansehen seitdem es mit .net laeuft

-
rapso schrieb:
Sowas ist in XNA scheinbar nicht vorgesehen, weil es wohl auf der XBox kein GDI gibt. Natürlich wäre es wohl irgendwie möglich, dynamisch eine Textur mit Kreis zu erstellen, aber es macht keinen Spaß. Warum der Aufwand, wenn ich unter Windows schreibe: new Bitmap(), DrawCircle(), new Texture().

es gibt tausend gruende ordentlich zu programmieren ohne solche hacks

Ich verstehe nicht wirklich, was daran ein Hack ist (außer dass man sich von der GDI abhängig macht). Es ist doch wesentlich bequemer als jetzt einen Buffer dem Texturformat und der Größe entsprechend zu erstellen und zu manipulieren und daraus eine Textur upzudaten. Das wäre die Alternative die mir einfällt und das mache ich zum Beispiel, um die Blendmap für den FOW zu erzeugen und es ist nicht schön, mit den einzelnen Bytes rumzuschubsen. Dort muss ich es allerdings in Echtzeit machen, deshalb ist da die GDI keine Option. Den Kreis erstelle ich nur beim Spielstart und es ist ein 3-Zeiler.
btw. offtopic aber: wie waere es wenn du dein stonage mal im engine/demo thread vorstellst, oder zumindestens im screenshot thread mal was neues zeigst?
so exklusiv fuer uns:)Ich arbeite inzwischen an einem neuen Spiel von dem ich mal ein paar Screenshots reinstellen kann. Vorher muss ich aber noch ein bisschen rumfreaken, dass der Sonnenaufgang anständig aussieht, dann mache ich das.

-
Optimizer schrieb:
rapso schrieb:
Sowas ist in XNA scheinbar nicht vorgesehen, weil es wohl auf der XBox kein GDI gibt. Natürlich wäre es wohl irgendwie möglich, dynamisch eine Textur mit Kreis zu erstellen, aber es macht keinen Spaß. Warum der Aufwand, wenn ich unter Windows schreibe: new Bitmap(), DrawCircle(), new Texture().

es gibt tausend gruende ordentlich zu programmieren ohne solche hacks

Ich verstehe nicht wirklich, was daran ein Hack ist (außer dass man sich von der GDI abhängig macht). Es ist doch wesentlich bequemer als jetzt einen Buffer dem Texturformat und der Größe entsprechend zu erstellen und zu manipulieren und daraus eine Textur upzudaten. Das wäre die Alternative die mir einfällt und das mache ich zum Beispiel, um die Blendmap für den FOW zu erzeugen und es ist nicht schön, mit den einzelnen Bytes rumzuschubsen. Dort muss ich es allerdings in Echtzeit machen, deshalb ist da die GDI keine Option. Den Kreis erstelle ich nur beim Spielstart und es ist ein 3-Zeiler.
no comment

btw. offtopic aber: wie waere es wenn du dein stonage mal im engine/demo thread vorstellst, oder zumindestens im screenshot thread mal was neues zeigst?
so exklusiv fuer uns:)Ich arbeite inzwischen an einem neuen Spiel von dem ich mal ein paar Screenshots reinstellen kann. Vorher muss ich aber noch ein bisschen rumfreaken, dass der Sonnenaufgang anständig aussieht, dann mache ich das.

stone age 3, oder was ganz neues?

-
rapso schrieb:
stone age 3, oder was ganz neues?

Es ist im Moment noch kein konkretes Spiel sondern eine RTS-Engine, die etwas vielseitiger werden soll. Im Moment ist das Rendering-System (allerdings fehlen Animationen noch komplett), Picking, grundlegende Steuerung, GUI-System, und das Grundgerüst für Einheitenverhalten (so plugable Verhaltensweisen, in dem Style) funktionsfähig. Ich tune gerade noch ein bisschen an der Tageszeitsimulation und als nächstes größeres wird dann Pathfinding hinzukommen, mit dem ich mich im Rahmen meiner Diplomarbeit beschäftigen werde.
Ein fertiges Spiel wird daraus so schnell nicht werden.

Und ich erwäge eben, das Rendering-System auf SlimDX umzustellen, aber ich muss erst noch ausloten, wie weit das jetzt schon benutzbar ist. Ein großer Vorteil davon wäre für mich, dass es einfach das COM-DirectX wrappt und keine komischen Abhängigkeiten zu MDX-DLLs hat, die dann auch nur per Redist verteilt werden dürfen.

-
ich wuerde dir empfehlen, falls du darauf umstellst, dir ne zwischenschicht einzubauen, sodass du zur not wieder auf mdx umsteigst, wer weiss wie lange solche projekte lebe wenn es mal darum geht bugs usw. zu fixen

ansonsten musst du in die bresche springen und bugs fixen (ist ja open source wenn ich richtig sehe
)