Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 08, 2025 01:16

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Mi Jan 20, 2010 00:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Lad vielleicht mal deinen kompletten Code hoch.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Mi Jan 20, 2010 09:48 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Okay ich habs mal in den Anhang gepackt
Es sollte mit GWT genauso ausführbar sein. Das WebProjekt beinhaltet die Wrapperklasse zu webGl und die overlaytypes, das sampleProject ist dann gewissermaßen weitgehend der Quellcode aus deinem Tutorial mit den bisher hier durchgesprochenen Änderungen.

Danke auf jedenfall für deine Hilfe

->der Download zum gezippten Projekt<-


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Mi Jan 20, 2010 10:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ok, ich denke ich habe den Fehler. Deine create-Methode taugt nix, den diese ist dank push sehr ineffizient und außerdem erzeugst du da JavaScript-Arrays und kein natives WebGL-Array welches du einfach nur castest. JavaScript-Arrays sind HashTabellen, d.h. du kannst z.B. auch einen String als Index benutzen, wenn du eine Zahl angibst wird die erst in einen String umgewandelt. WebGL-Array sind Arrays im C/C++-Stil, also wirklich ein zusammenhängender Speicherbereich mit dem korrekten Datentyp.

Dein Code gibt keinen Fehler aus weil bei JSNI-Methoden keine Typprüfung stattfindet und du vermutlich die "-ea" Option beim compilieren vergessen hast. Letztere sorgt dafür das Assertions ausgeführt werden.

Code:
  1.     public static WebGLUnsignedShortArray create (short[] array)
  2.     {
  3.         WebGLUnsignedShortArray result = (WebGLUnsignedShortArray)createArray();
  4.         for (int i = 0; i < array.length; i++) {
  5.             pushArray(result, array[i]);
  6.         }
  7.         return result;
  8.     }
  9.    
  10.     protected native static void pushArray(WebGLUnsignedShortArray array,
  11.             short i) /*-{
  12.         array.push(i);
  13.     }-*/;


in WGT ist das wie folgt gelöst. Es wird gar nicht erst der Umweg über ein Java-Array gegangen sondern das JavaScript-Array (JsArrayInteger) direkt in ein WebGLUnsignedShortArray umgewandelt.
Code:
  1.     public static WebGLUnsignedShortArray create(JSONArray array) {
  2.         return create((JsArrayInteger)array.getJavaScriptObject());
  3.     }
  4.  
  5.     public static native WebGLUnsignedShortArray create(int size) /*-{
  6.         return new WebGLUnsignedShortArray(size);
  7.     }-*/;
  8.  
  9.     public static native WebGLUnsignedShortArray create(JsArrayInteger array) /*-{
  10.         return new WebGLUnsignedShortArray(array);
  11.     }-*/;


Aber um mal schnell ein paar Vertices in ein WebGLArray zu werfen schreibe ich mir meist eine Methode die so aussieht:
Code:
  1.     private native WebGLFloatArray createGlowVertices() /*-{
  2.         return new WebGLFloatArray([  
  3.             -1.0,  1.0,
  4.             -1.0, -1.0,
  5.              1.0,  1.0,
  6.              1.0, -1.0,
  7.         ]);
  8.     }-*/;

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Mi Jan 20, 2010 14:45 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Okay an der Stelle wird es wohl gelegen haben. In meinem umgeschriebenen Shader habe ich nun zumindest ein weißes Dreieck. Das ist schonmal eine Erleichterung :)

Ich werde deine Hinweis über das JSONArray mal auf alle Arrays übertragen. Was ich mich allerdings frage, ich habe jetzt eine Methode analog zu deiner createGlowVertices() native in die Klasse geschrieben, die ein festes Array zurückgibt. Wie kann ich aber aus meinem JavaQuellcode heraus ein WebGLirgendwas-Array erzeugen?

Deshalb überhaupt bin ich ja den Umweg über die JavaArrays gegangen. Soweit ich weiß, kann ich ein JSON-Array ja außerhalb einer native Methode nicht selbst instanzieren, also wie kann ich in meinem JavaQuellcode Arrays erzeugen für webGL?

Edit: Nachdem ich den Shader wieder zurückgesetzt hatte, funktioniert nun auch endlich das Beispiel mit dem DGL Logo :) Danke schön


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Mi Jan 20, 2010 15:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Wie kann ich aber aus meinem JavaQuellcode heraus ein WebGLirgendwas-Array erzeugen?

Geht nicht, es sein den du schreibst dir eine Methode create wie ich das getan habe. Das einfachste ist auf Java-Arrays zu verzichten, den diese müssten erst in JavaScript-Arrays umgewandelt werden und dann wieder in WebGLirgendwas.

P.S. Ein JSONArray ist wieder was anderes. Das brauchst du wenn du größere Datenmengen aus einer JSON-Datei laden möchtest. Ich lade meine Meshes und allgemein alles auf diese Art, da JSON vom Browser nativ geparst werden kann: schnell + simpel zu implementieren. JSON ist einfach nur ein Objekt in JavaScript-Syntax.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Do Jan 21, 2010 19:23 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Okay dann muss ich mir die JSON arrays nochmal ansehen.

Noch eine Frage in Bezug auf Statische Variablen hab ich:

Macht es einen Unterschied, ob ich statische oder nichtstatische Variablen im JS verwende?
Also als beispiel:

Code:
  1.  
  2. private static JavaScriptObject gl1;
  3. private JavaScriptObject gl2;
  4.  
  5. //....
  6. @de.foo.gl1::irgendwas();
  7.  
  8. //oder
  9. this.@de.foo.gl2::irgendwas();
  10.  


Ist da irgendein Unterschied bezüglich Größe des Javascripts, Ausführgeschwindigkeit usw? Ansonsten würd ich nämlich versuchen, soviel wie möglich nicht-statisch zu machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Do Jan 21, 2010 20:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also der Unterschied dürfte minimal sein. Was da für Code generiert wird kannst du dir ja angucken, ggf. Code-Style auf "Pretty" stellen damit Variablen nicht umbenannt werden und auch nicht alles in einer Zeile steht.

Bei meiner WebGL-Wrapper-Klasse habe ich das WebGL-Objekt allerdings statisch gemacht, damit da später im Code wirklich gl.funktionBlaBla steht und nicht instanz.gl.funktionBlaBla.

Also an stellen wo es wirklich auf Performance ankommt und es sich um eine Singletonklasse handelt sollte es statisch sein.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Do Jan 21, 2010 22:32 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
müsste bei der nichtstatischen variante dann da nicht instanz.funktionsblaa() stehen?

@ performance: wodurch ändert sich denn da die performance? also warum ist instance.funktion() langsamer als klasse.funktion()?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Do Jan 21, 2010 23:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wenn gl dein WebGL-Context ist und ein nicht-statisches Attribut deiner Wrapperklasse, dann steht da instanz.gl.funktionBlaBla. Wenn gl aber statisch ist, dann ist das einfach eine globale Variable.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Fr Jan 22, 2010 00:17 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Mh achso ja ich hab vergessen, dass es in WebGL noch das Javascriptobject Gl gibt

Aber bezüglich der Performanceänderungen.. liegt der Performanceunterschied dann tatsächlich im Unterschied statisch<->nicht-statisch oder einfach nur darin, dass die statische variante weniger JS-code ausmacht und damit schneller zu parsen ist?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Fr Jan 22, 2010 10:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Coolcat hat geschrieben:
Also der Unterschied dürfte minimal sein

Es ist einfach nur eine Operation (Referenz verarbeiten) weniger, aber da man gl.* Funktionen ständig braucht...

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: WebGL GWT
BeitragVerfasst: Fr Jan 22, 2010 18:01 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Okay das hatte ich mir gedacht :) Damit dürften dann alle Unklarheiten beseitigt sein
vielleicht kann ich ja auch irgendwann mal was vorzeigbares WebGLtechnisches präsentieren :)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 27 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.018s | 17 Queries | GZIP : On ]