Frage

Ich versuche, die Augenposition in meinem Shader von meinem appliaction zu bekommen zu aktualisieren, aber ich erhalte immer Fehler 1281, als ich das versuchen. Ich habe keine Probleme nach der Initialisierung nur wenn ich anschließend versuchen, die Werte zu aktualisieren. Hier ist mein Code:

void GraphicsObject :: SendShadersDDS (char vertFile [] char fragFile [],                                     char filename []) {

            char *vs = NULL,*fs = NULL;

            vert = glCreateShader(GL_VERTEX_SHADER);
            frag = glCreateShader(GL_FRAGMENT_SHADER);

            vs = textFileRead(vertFile);
            fs = textFileRead(fragFile);
            const char * ff = fs;
            const char * vv = vs;

            glShaderSource(vert, 1, &vv, NULL);
            glShaderSource(frag, 1, &ff, NULL);

            free(vs); free(fs);

            glCompileShader(vert);
            glCompileShader(frag);

            program = glCreateProgram();
            glAttachShader(program, frag);
            glAttachShader(program, vert);

            glLinkProgram(program);
            glUseProgram(program);

        LoadCubeTexture(filename, compressedTexture);

        GLint location = glGetUniformLocation(program, "tex");
        glUniform1i(location, 0);
        glActiveTexture(GL_TEXTURE0);

        EyePos = glGetUniformLocation(program, "EyePosition");

        glUniform4f(EyePos, EyePosition.X(),EyePosition.Y(), 
                                    EyePosition.Z(), 1.0);          
        DWORD bob = glGetError();
        //All is fine here
        glEnable(GL_DEPTH_TEST);

}

Und hier ist die Funktion, die ich Aufruf an die Augenposition zu aktualisieren:

void GraphicsObject :: UpdateEyePosition (Vector3D & eyePosition) {

glUniform4f(EyePos, eyePosition.X(),eyePosition.Y(), 
                                    eyePosition.Z(), 1.0);

DWORD bob = glGetError();
//bob equals 1281 after this call       

}

Ich habe ein paar Möglichkeiten ausprobiert jetzt die Variable zu aktualisieren und dies ist die neueste Inkarnation, Dank für das Betrachten alle Kommentare begrüßen zu können.

UPDATE: der Fehler tatsächlich ist hier überhaupt nicht geschieht, meine Schuld für die Annahme, es war, der Fehler tatsächlich auftritt, wenn ich eine Reihe von Feder ziehen:

für (int i = 0; i <2; i ++)     {

        springs[i].Draw();

}

Als ich das erste es ist in Ordnung zu ziehen, aber ich erhalte eine Fehlermeldung, wenn der zweite an dem Punkt, wo Anruf glEnd () als Reaktion auf glBegin (GL_LINE_STRIP) aufrufen. Es tut uns leid, da es nicht der Fehler war ich geschrieben, aber atleast, wenn jemand wissen will, wie einheitliche Variablen zu aktualisieren, dann ist es hier.

War es hilfreich?

Lösung

Es wird höchstwahrscheinlich dies durch die Tatsache verursacht wird, dass EyePos ungültig ist.

Was passiert, wenn Sie die Funktion der folgenden ändern?

void GraphicsObject::UpdateEyePosition(Vector3d& eyePosition)
{
    EyePos = glGetUniformLocation(program, "EyePosition");
    glUniform4f(EyePos, eyePosition.X(),eyePosition.Y(), eyePosition.Z(), 1.0);

    DWORD bob = glGetError();
}

Edit: Als Reaktion auf das Update die Dokumentation für glBegin / glEnd sagen, dass Sie Fehler 1280 (GL_INVALID_ENUM), wenn Modus auf einen nicht akzeptablen Wert eingestellt ist. So kann Ihr Problem ist, dass GL_LINE_STRIP wird nicht unterstützt.

GL_INVALID_OPERATION is generated if glBegin is executed between a glBegin and the corresponding execution of glEnd.

GL_INVALID_OPERATION is generated if glEnd is executed without being preceded by a glBegin.

GL_INVALID_OPERATION is generated if a command other than glVertex, glColor, glSecondaryColor, glIndex, glNormal, glFogCoord, glTexCoord, glMultiTexCoord, glVertexAttrib, glEvalCoord, glEvalPoint, glArrayElement, glMaterial, glEdgeFlag, glCallList, or glCallLists is executed between the execution of glBegin and the corresponding execution glEnd.

GL_INVALID_OPERATION kehrt Fehler 1282 und GL_INVALID_ENUM 1280 ... So viel hängt davon ab, was Sie genauen Fehler bekommen ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top