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

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

11

08.06.2013, 14:49

Habe den Error behoben, war ein falscher Texturparameter... Problem bleibt aber bestehen

edit:
achso und mit dem uniform buffer glaub ich nicht, denn der Shader Code ist stark angelehnt an eine Präsentation von Mark Kilgard und dem sei mal geglaubt

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

12

08.06.2013, 16:43

ok ich habs jetzt selber rausgefunden

C-/C++-Quelltext

1
2
3
4
5
6
// Für ein Array von 5x5
glUniform1fv(weightHandle,   5,weights[0]);
glUniform1fv(weightHandle+5, 5,weights[1]);
glUniform1fv(weightHandle+10,5,weights[2]);
glUniform1fv(weightHandle+15,5,weights[3]);
glUniform1fv(weightHandle+20,5,weights[4]);


Trotz allem danke für die Mühen dot

Greets

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

13

08.06.2013, 16:47

C-/C++-Quelltext

1
2
3
4
5
// Für Schreibfaule
for(unsigned int i = 0; i != 5 /* oder jede andere Zahl */; i++)
{
    glUniform1fv(weightHandle+i*5, 5, weights[i]);
}

Tobiking

1x Rätselkönig

  • Private Nachricht senden

14

08.06.2013, 23:57

Ist das mit dem handle+5 nur zufällig weil der Treiber das der Reihe nach anordnet oder ist das so spezifiziert?

Nachdem ich deine Lösung gesehen habe, glaube ich eine korrekte Lösung in der Spec zu glGetUniformLocation gefunden zu haben:

Zitat von »"http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformLocation.xml"«

Uniform variables that are structures or arrays of structures may be queried by calling glGetUniformLocation for each field within the structure. The array element operator "[]" and the structure field operator "." may be used in name in order to select elements within an array or fields within a structure.

Entsprechend kann man sich die Handles für alle "weights[]" gezielt holen und diese dann wie eindimensionale Arrays füllen.

Das würde auch für mehr als 2 Dimensionen klappen, wäre allerdings nochmal umständlicher, da man sich für das Iterieren zusätzlich auch noch die Strings generieren müsste. Da gibt es sicherlich noch was anderes oder wird noch kommen.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Tobiking« (09.06.2013, 15:11)


Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

15

09.06.2013, 13:50

Ok das ist interessant zu wissen
:thumbsup:

Habe mich an dem OpenGL Wiki orientiert:

Zitat

Quellcode

1
 uniform vec3 positions[20];


Each individual element in the uniform array has a location. The
names of them are "positions[2]", "positions[3]", etc. However, the
uniform location for "positions" and "positions[0]" are the same; they
point to the first element of the array.

If you use the array uniform upload functions on an array location,
then the referenced location and those following it will be updated.

In a similar way as to structs, explicitly-located array uniforms are
given sequential location values. "position[0]" will be the explicit
location, while "position[3]" will be 3 larger than this value.

Werbeanzeige