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

Aktuelle Zeit: Fr Jul 04, 2025 17:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jul 28, 2010 15:50 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Schönen Vormittag! (Bei mir sind Ferien :wink: )
Seit gestern oder vorgestern habe ich hier ein Problem, dass ich mir nicht erklären kann. Und zwar versuche ich Shader-Code aus gewöhnlichen Textdateien zu laden (*eigentlich* ja ganz easy...). Hier mein C++-Code:
Code:
  1. bool CGLSLShader::LoadFromTXTFile(const char* FileName)
  2. {
  3.   vsCode = "";
  4.   fsCode = "";
  5.   CString str(FileName);
  6.   char* pBuf = NULL;
  7.   unsigned long len = 0;
  8.  
  9.   // VertexShader
  10.   str += ".vert";
  11.   FILE* f = fopen(str.c_str(), "rt");
  12.   if(f == NULL)
  13.     return false;
  14.   fseek(f, 0, SEEK_END);
  15.   len = ftell(f);
  16.   fseek(f, 0, SEEK_SET);
  17.   pBuf = new char[len+1];
  18.   if(pBuf == NULL)
  19.   {
  20.     fclose(f);
  21.     return false;
  22.   }
  23.   fread(pBuf, len, 1, f);
  24.   fclose(f);
  25.   f = NULL;
  26.   pBuf[len] = '\0';
  27.   vsCode = pBuf;
  28.   delete[] pBuf;
  29.   pBuf = NULL;
  30.  
  31.   // FragmentShader
  32.   str -= 5;
  33.   str += ".frag";
  34.   f = fopen(str.c_str(), "rt");
  35.   if(f == NULL)
  36.     return false;
  37.   fseek(f, 0, SEEK_END);
  38.   len = ftell(f);
  39.   fseek(f, 0, SEEK_SET);
  40.   pBuf = new char[len+1];
  41.   if(pBuf == NULL)
  42.   {
  43.     fclose(f);
  44.     return false;
  45.   }
  46.   fread(pBuf, len, 1, f);  // Hier knallt es!!!
  47.   fclose(f);
  48.   pBuf[len] = '\0';
  49.   fsCode = pBuf;
  50.   delete[] pBuf;
  51.  
  52.   return true;
  53. }

vsCode und fsCode sind Klassenmember vom Typ CString (selbstgeschriebene Klasse, die seit ca. einem halben Jahr klasse Arbeit verrichtet, ohne je Probleme gemacht zu haben).

Ich sehe in dem Code keinen Fehler. Jedoch kann ich mich darauf verlassen, dass die ersten 3 Zeichen von pBuf immer "" sind (was DEFINITIV nicht in der Datei steht), wenn mein Programm die mit dem Kommentar "Hier knallt es!!!" markierte Zeile passiert hat. Erst nach diesen 3 Zeichen beginnt der eigentliche GLSL-Code und zwar der ganze Code (es fehlen also nicht die letzten 3 Zeichen oder sowas). :?

Als Quick-Hack habe ich einfach mal die Zeile, die ich mit dem Kommentar markiert habe, durch folgende ersetzt:
Code:
  1. fread(pBuf-3, len, 1, f);

Also die ersten 3 Zeichen werden ignoriert (könnte natürlich eine Zugriffsverletzung verursachen...)

Und siehe da, der GLSL-Shader kriegt den richtigen Code, kompiliert einwandfrei und tut, was er soll.

Ich hab' jetzt echt keinen Plan, was mein Programm zu solch einem "Fehlverhalten" verleiten könnte. Jemand von euch vielleicht? Wär' wirklich nett, wenn einer die Langeweile / Hilfsbereitschaft aufbringen könnte sich meinem Post zu widmen. :wink:

Danke schon mal im Vorraus für Antworten!

mrtrain


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:36, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 28, 2010 16:22 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Wieso ist das "Offtopic"? Naja, wie auch immer: Passiert das nur beim Fragmentshader oder auch beim Vertexshader? Also für mich sieht das alles ok aus. Hast du dir mal pBuf direkt ausgeben lassen, also ohne Umweg über dein CString?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 28, 2010 16:50 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Offtopic weil es für mich in keine andere Kategorie passt (bei Allgemein steht z.B. "Delphi allgemein" in der Beschreibung). Außerdem finde ich, passt mein Thread halbwegs zu diesem von Aya. Wenn jemand der Meinung ist, dass das in ein anderes Forum gehört, bitte verschieben.

Der Vertexshader wird korrekt geladen. Ich habe auch schon mal die Reihenfolge vertauscht, also erst den Fragmentshader und dann den Vertexshader geladen. Der Fehler bleibt allerdings beim Laden vom Fragmentshader. Ich habe sowohl den Inhalt von pBuf und fsCode ausgeben lassen - beide sind gleich.

Danke, ich freu mich auf weitere Antworten. :)

mrtrain


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:36, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 28, 2010 21:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Allgemein passt schon. Off-Topic nicht, weil es von Suchmaschinen nicht mehr indiziert wird (auch Gastuser kommen da nicht mehr rein). Vielleicht sollte man mal die Beschreibung von Allgemein anpassen.

Mit welchem Editor hast du die Datei erzeugt? Könnte das eine Encoding/BOM sein?

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 28, 2010 22:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Könnte das eine Encoding/BOM sein?

Ziemlich sicher, den bei Wikipedia steht genau die Zeichenfolge:
Wikipedia hat geschrieben:
Die UTF-8-Kodierung des BOM besteht aus der Bytesequenz EF BB BF, die in nicht UTF-8-fähigen Texteditoren und Browsern meist als ISO-8859-1-Zeichen  erscheinen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 28, 2010 22:48 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Ja! Das war es! Ein ganz großes Dankeschön an euch! Ich habe wohl den Vertexshader per ANSI und den Fragmentshader in UTF-8 gespeichert.

Vielen Dank! :D :D :D


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:37, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Aug 16, 2010 19:07 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Dazu sag ich nur:

The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)
(aka There ain't no such thing as plain text).

~ Frase

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Aug 17, 2010 20:10 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Oh ja, danke für den Link! Sollte man wohl wirklich mal gelesen haben - jetzt blicke ich da endlich mal halbwegs durch, bei den ganzen Kodierungsmethoden. :wink:


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 19:37, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Aug 17, 2010 23:07 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Jo, war gute lektüre. @Frase: Wenn du mehr sowas hast, dann her damit.
Vielleicht verlinkten wir das mal im Wiki in der Linksektion unter "Sprachunabhängige Programmierer Basics" ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.008s | 14 Queries | GZIP : On ]