thekiller
Viceinator
Hallo,
ich hab grad ein nerviges Problem wo was ich nicht ganz verstehe.
Also ich habe eine Klasse mit einer Methode die eine Textdatei komplett einlesen soll und als OpenGL Shader dient. Vor dem Einlesen ermittle ich die Dateigröße welche auch stimmt. Dann alloziiere ich Speicher für den Inhalt der Datei und lese die Datei ein. Dann will ich den Strink 0-terminieren an der Position => FileSize. Laut VC++ Debugger sind ist nach dem Terminieren immernoch ein paar Zeichen ab der Stelle wo der String eigentlich terminiert sein sollte.
Wenn ich den String FileSize -8 terminiere stimmt der String, dann ist die Stringlänge, ermittelt mit strlen(), aber 173. Irgendwas haut da überhaut nich hin. Hat jemand ne idee?
Beispiel:
Dateiinhalt:
Inhalt von FileContent nach Einlesen der Datei (DEBUGGER):
Inhalt von FileContent nach Terminierung (DEBUGGER):
Hier mal die Methode:
MfG Manuel
ich hab grad ein nerviges Problem wo was ich nicht ganz verstehe.
Also ich habe eine Klasse mit einer Methode die eine Textdatei komplett einlesen soll und als OpenGL Shader dient. Vor dem Einlesen ermittle ich die Dateigröße welche auch stimmt. Dann alloziiere ich Speicher für den Inhalt der Datei und lese die Datei ein. Dann will ich den Strink 0-terminieren an der Position => FileSize. Laut VC++ Debugger sind ist nach dem Terminieren immernoch ein paar Zeichen ab der Stelle wo der String eigentlich terminiert sein sollte.
Wenn ich den String FileSize -8 terminiere stimmt der String, dann ist die Stringlänge, ermittelt mit strlen(), aber 173. Irgendwas haut da überhaut nich hin. Hat jemand ne idee?
Beispiel:
Dateiinhalt:
Code:
varying vec3 lightDir, normal;
void main()
{
lightDir = normalize(vec3(gl_LightSource[0].position));
normal = gl_NormalMatrix * gl_Normal;
gl_Position = ftransform();
}
Inhalt von FileContent nach Einlesen der Datei (DEBUGGER):
Code:
varying vec3 lightDir, normal;
void main()
{
lightDir = normalize(vec3(gl_LightSource[0].position));
normal = gl_NormalMatrix * gl_Normal;
gl_Position = ftransform();
}ÍÍÍÍÍÍÍÍÍýýýý««««««««îþîþîþ
Inhalt von FileContent nach Terminierung (DEBUGGER):
Code:
varying vec3 lightDir, normal;
void main()
{
lightDir = normalize(vec3(gl_LightSource[0].position));
normal = gl_NormalMatrix * gl_Normal;
gl_Position = ftransform();
}ÍÍÍÍÍÍÍÍ
Hier mal die Methode:
C++:
FILE* File = NULL;
uint32 FileSize = 0;
char* FileContent = NULL;
File = fopen(_FileName, "rt"); // _FileName wird der Methode übergeben
if(File == NULL) {
throw "LoadShaderFile():\nShaderfile konnte nicht geöffnet werden!";
}
fseek(File, 0, SEEK_END);
FileSize = ftell(File); // FileSize ist 181 => stimmt
fseek(File, 0, SEEK_SET);
FileContent = new char[FileSize + 1];
if(FileContent == NULL) {
fclose(File);
throw "LoadShaderFile():\nNicht genug Speicher!";
}
fread(FileContent, FileSize, 1, File);
FileContent[FileSize] = 0; // FileSize ist laut Debugger 181 => stimmt
uint32 i = strlen(FileContent); // i ist 181 => stimmt aber der String enthält mehr als 181 Zeichen************************************
fclose(File);
///////////////////////////////////////////////////////////////////////////
this->VertexShaderHandle = glCreateShader(GL_VERTEX_SHADER);
const char* ShaderText = FileContent;
i = strlen(ShaderText);
glShaderSource(this->VertexShaderHandle, 1, &ShaderText, NULL);
glCompileShader(this->VertexShaderHandle);
char buff[1024] = {0};
GLsizei size = 0;
glGetShaderInfoLog(this->VertexShaderHandle, 1024, &size, buff);
///////////////////////////////////////////////////////////////////////////
delete[] FileContent;
MfG Manuel
Zuletzt bearbeitet von einem Moderator: