سؤال

أحاول الحصول على تحديث موضع العين في تظليلتي من Appliaction ، لكنني ما زلت أخطأ في 1281 عندما أحاول ذلك. ليس لدي أي مشاكل بعد التهيئة فقط عندما أحاول لاحقًا تحديث القيم. ها هو رمزتي:

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);

}

وإليك الوظيفة التي أتصل بها لتحديث موضع العين:

void graphicsoBject :: updateEePosition (Vector3D & eyeposition) {

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

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

}

لقد جربت بعض الطرق الآن لتحديث المتغير وهذا هو أحدث تجسد ، شكرًا على المشاهدة ، جميع التعليقات مرحب بها.

تحديث: الخطأ لا يحدث بالفعل هنا على الإطلاق ، خطأي في افتراض أنه كان ، يحدث الخطأ فعليًا عندما أرسم عددًا من الربيع:

لـ (int i = 0 ؛ i <2 ؛ i ++) {

        springs[i].Draw();

}

عندما أرسم الأول ، يكون الأمر جيدًا ، لكنني أحصل على خطأ عند الاتصال بالثاني عند النقطة التي يتسلق فيها Call Glend () استجابةً لـ glbegin (gl_line_strip). آسف على الإزعاج لأنه لم يكن الخطأ الذي نشرته ولكن على الأقل إذا كان أي شخص يريد معرفة كيفية تحديث المتغيرات الموحدة ، فهو هنا.

هل كانت مفيدة؟

المحلول

من المرجح أن يكون هذا ناتجًا عن حقيقة أن Eyepos غير صالح.

ماذا يحدث إذا قمت بتغيير الوظيفة إلى ما يلي؟

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

    DWORD bob = glGetError();
}

تحرير: استجابةً للتحديث الخاص بك ، قل مستندات glbegin/glend أنك ستحصل على خطأ 1280 (gl_invalid_enum) إذا تم تعيين الوضع على قيمة غير مقبولة. وبالتالي فإن مشكلتك هي أن gl_line_strip غير مدعوم.

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 إرجاع الخطأ 1282 و GL_INVALID_ENUM 1280 ... لذلك يعتمد الكثير على الخطأ الدقيق الذي تحصل عليه ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top