Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

11

12.01.2010, 19:00

Zitat von »"the[V«

oid"]

C-/C++-Quelltext

1
const float width = 800;

Ist das gleichwertig, wie wenn ich direkt überall 800 einsetze, wo ich sonst width schreiben würde?

Kommt auf den Compiler an, in HLSL ist das static Keyword entscheidend, das jeglichen Zugriff auf die entsprechende Variable von Außen (d.h. programmseitig per Shader-Konstante) verbietet. Mit static const solltest du auf der sicheren Seite sein, dann ist es garantiert dasselbe wie die Zahlenkonstante an sich.
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

CodingCat

1x Contest-Sieger

Beiträge: 420

Beruf: Student (KIT)

  • Private Nachricht senden

12

12.01.2010, 19:02

Zitat von »"the[V«

oid"]Wird zwar vielleicht nicht immer ganz korrekte Ergebenisse liefern, dafür spart man sich aber das Wechseln zwischen verschiedenen Render-Targets, oder nicht?

Das geht, ist aber nicht dasselbe. Hier blurst du über ein Kreuz um den Pixel herum, nicht über ein ganzes Rechteck. Der Effekt ist also wesentlich schwächer als bei separaten Passes. Du "sparst" also nichts.
alphanew.net (last updated 2011-06-26) | auf Twitter | Source Code: breeze 2 | lean C++ library | D3D Effects Lite

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

13

12.01.2010, 19:13

Gut, das ist ein Argument.

Noch eine Frage. Wenn ich so etwas hier verwende, wie in dem Wiki-Artikel beschrieben:

C-/C++-Quelltext

1
2
3
const float gaussFilter[gaussRadius] = float[gaussRadius](
    0.0402,0.0623,0.0877,0.1120,0.1297,0.1362,0.1297,0.1120,0.0877,0.0623,0.0402
);


Dann meckert der GLSL-Compiler, konstante Arrays würden nicht unterstützt. Was soll das nun?
<< an dieser Stelle ist eine Signatur verstorben >>

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

14

12.01.2010, 19:19

Mach mal so:

C-/C++-Quelltext

1
2
const float gaussFilter[] ={   0.0402,0.0623,0.0877,0.1120,0.1297,0.1362,0.1297,0.1120,0.0877,0.0623,0.0402 
};

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

15

12.01.2010, 19:24

Dies führt zu zwei Fehlern:

OpenGL does not allow constant arrays
OpenGL does not allow C-style initializers
<< an dieser Stelle ist eine Signatur verstorben >>

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

16

12.01.2010, 19:31

Ah ok, sry my fault. Die Syntax ist da in GLSL etwas anders. So wie dus gemacht hast:

C-/C++-Quelltext

1
2
const float gaussFilter[gaussRadius] = float[gaussRadius](   0.0402,0.0623,0.0877,0.1120,0.1297,0.1362,0.1297,0.1120,0.0877,0.0623,0.0402 
);


sollte schon passen. Ist gaussRaduis auch eine Konstante?
Wenn ja geht das in GLSL wohl nicht und du musst du da halt vermutlich den Wert direkt reinschreiben...

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

17

12.01.2010, 19:40

Ja, es ist ebenfalls eine Konstante. Also ein Fehler im Wiki?

EDIT: Also wenn ich da 11 reinschreibe, bleibt der Fehler mit den konstanten Arrays.
<< an dieser Stelle ist eine Signatur verstorben >>

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

18

12.01.2010, 19:53

Ich kenn mich mit GLSL zu wenig aus, scheinbar kann das da wohl kein const:

C-/C++-Quelltext

1
2
/*const*/ float gaussFilter[gaussRadius] = float[gaussRadius](   0.0402,0.0623,0.0877,0.1120,0.1297,0.1362,0.1297,0.1120,0.0877,0.0623,0.0402 
);


Musst du evtl. so machen und hoffen dass der compiler dann noch die schleife unrollen kann...

Werbeanzeige