ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4441922
Jetzt (Chat):
30 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
OpenGL API + SDL
Re: EXT_geometry_shader4:
Normal
AutorThema
Coolcat Offline
ZFX'ler


Registriert seit:
26.01.2004

Nordrhein-Westfalen
[Gelöst] EXT_geometry_shader4: "Segmentation fault" beim linkenNach oben.
Ich probiere gerade zum ersten mal den Geometryshader (GS) aus. Ich will den GS benutzen um in meinem GPU-Partikelsystem einzelne Partikel deren Lebenszeit abgelaufen ist zu unterdrücken, während ich diese via GL_NV_transform_feedback in einen Vertexbuffer schreibe. Im nächsten Pass sollen diese dann durch neue Partikel vom Emitter ersetzt werden.

Leider bekomme ich aus mir nicht ersichtlichen Gründen einen "Segmentation fault" beim Aufruf von glLinkProgram.
Beim compilieren der beiden Shaderobjekte treten aber keine Fehler auf. Ich bin entsprechend ratlos, da das ganze keinen segfault gibt, wenn ich die Zeile glAttachShader(m_prgMove, gsMove) auskommentiere.

Meine Grafikkarte ist eine Nvidia 9800GT von Gainward, laut glxinfo wird die Extension GL_EXT_geometry_shader4 auch unterstützt. Ich arbeite unter einem Fedora 10 Linux (64bit), falls das wichtig sein sollte.

Hat jemand ne Idee was ich hier falsch mache?

Code:
m_prgMove = glCreateProgram();
GLuint vsMove = CUtil::loadShader(GL_VERTEX_SHADER, \"data/shader/particle-move.vs\");
GLuint gsMove = CUtil::loadShader(GL_GEOMETRY_SHADER_EXT, \"data/shader/particle-move.gs\");
glAttachShader(m_prgMove, vsMove);
glAttachShader(m_prgMove, gsMove);
glProgramParameteriEXT(m_prgMove, GL_GEOMETRY_VERTICES_OUT_EXT, 1);
glProgramParameteriEXT(m_prgMove, GL_GEOMETRY_INPUT_TYPE_EXT, GL_POINTS);
glProgramParameteriEXT(m_prgMove, GL_GEOMETRY_OUTPUT_TYPE_EXT, GL_POINTS);
glLinkProgram(m_prgMove); // <-- hier kommt der segfault
CUtil::checkLinkError(\"data/shader/particle-move\", m_prgMove);
glDeleteShader(vsMove);
glDeleteShader(gsMove);


Code:
GLuint CUtil::loadShader(GLenum type, const char* filename) {
    FILE* file = fopen(filename, \"rb\");
    if (file == 0) {
        throw Exception(std::string(\"error loading '\") + filename + \"'\");
    }

    fseek(file, 0, SEEK_END);
    int size = ftell(file);
    fseek(file, 0, SEEK_SET);
    char* data = new char[size+1];
    int read = fread(data,1,size,file);
    if (read != size) {
        throw Exception(std::string(\"error during loading '\") + filename + \"'\");
    }
    fclose(file);
    data[size]=0;
    const char* data_const = data;

    GLuint shader = glCreateShader(type);
    glShaderSource(shader, 1, &data_const, NULL);
    glCompileShader(shader);
    delete[] data;

    // retrieve infolog
    int len;
    glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &len);
    if (len > 1) {
        char buffer[len];
        glGetShaderInfoLog(shader, len, NULL, buffer);
        std::cout << \"file: \" << filename << \"\n\";
        std::cout << buffer << \"\n\";
    }
    
    int status = 0;
    glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
    if (status) { 
        return shader; 
    }
    else {
        throw Exception(\"error: shader compilation failed.\");
    }
}


1 Mal gendert, zuletzt am 25.01.2009, 19:49:44 Uhr von Coolcat.
25.01.2009, 19:30:28 Uhr
Coolcat's Page
Coolcat Offline
ZFX'ler


Registriert seit:
26.01.2004

Nordrhein-Westfalen
Re: EXT_geometry_shader4: Nach oben.
Problem gelöst. Man muss wohl zwangsläufig im Vertexshader in gl_Position schreiben, auch wenn man den Wert eigentlich gar nicht benötigt. Warum das dann nicht einfach einen Linkerfehler gibt sondern einen Segfault ist mir nicht ganz klar...

1 Mal gendert, zuletzt am 25.01.2009, 19:50:43 Uhr von Coolcat.
25.01.2009, 19:48:41 Uhr
Coolcat's Page
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel