Windows - SwapBuffer Nvidia Crash

Indlæg af Hanne Mølgaard Plasc

Problem



EDIT: Jeg troede, at dette var begrænset til Attribut-Created GL kontekster, men det er ikke, så jeg rewrote posten.


Hey guys, når jeg kalder SwapBuffers(hDC), får jeg et crash. Hvis jeg opretter det med WGL\_CONTEXT\_DEBUG\_BIT\_ARB, får jeg en



  For mange poster blev der lavet en semafor.



fra Windows, som jeg kalder SwapBuffers. Hvad kunne være årsagen til dette?


Opdatering: Der opstår ikke noget sammenbrud, hvis jeg ikke trækker, bare ryd og bytte.


Her er en del af koden med de irrelevante bits skåret ud:


static  PIXELFORMATDESCRIPTOR pfd =             // pfd Tells Windows How We Want Things To Be
    {
        sizeof(PIXELFORMATDESCRIPTOR),              // Size Of This Pixel Format Descriptor
        1,                                          // Version Number
        PFD\_DRAW\_TO\_WINDOW |                        // Format Must Support Window
        PFD\_SUPPORT\_OPENGL |                        // Format Must Support OpenGL
        PFD\_DOUBLEBUFFER,                           // Must Support Double Buffering
        PFD\_TYPE\_RGBA,                              // Request An RGBA Format
        32,                                         // Select Our Color Depth
        0, 0, 0, 0, 0, 0,                           // Color Bits Ignored
        0,                                          // No Alpha Buffer
        0,                                          // Shift Bit Ignored
        0,                                          // No Accumulation Buffer
        0, 0, 0, 0,                                 // Accumulation Bits Ignored
        24,                                         // 24Bit Z-Buffer (Depth Buffer)  
        0,                                          // No Stencil Buffer
        0,                                          // No Auxiliary Buffer
        PFD\_MAIN\_PLANE,                             // Main Drawing Layer
        0,                                          // Reserved
        0, 0, 0                                     // Layer Masks Ignored
    };

if (!(hDC = GetDC(windowHandle)))
    return false;

unsigned int PixelFormat;
if (!(PixelFormat = ChoosePixelFormat(hDC, &pfd)))
    return false;

if (!SetPixelFormat(hDC, PixelFormat, &pfd))
    return false;

hRC = wglCreateContext(hDC);
if (!hRC) {
    std::cout << "wglCreateContext Failed!
";
    return false;
}

if (wglMakeCurrent(hDC, hRC) == NULL) {
    std::cout << "Make Context Current Second Failed!
";
    return false;
}

... // OGL Buffer Initialization

glClear(GL\_DEPTH\_BUFFER\_BIT | GL\_COLOR\_BUFFER\_BIT);
glBindVertexArray(vao);
glUseProgram(myprogram);
glDrawElements(GL\_TRIANGLES, indexCount, GL\_UNSIGNED\_SHORT, (void *)indexStart);
SwapBuffers(GetDC(window\_handle));

Bedste reference


Jeg fandt svaret. Kommandoen SwapBuffer (hDC) var simpelthen hvor fejlen opstod, men havde ikke noget at gøre med det. Jeg tror, ​​at min fejl skyldtes noget, der er relateret til mine indekser, som om jeg kun tegner det første maske i modellen, fungerer alt som beregnet. Nvidia styrtede med denne fejl, Intel fortsatte og ignorerede det.


Ikke desto mindre, tak til Chris Becke for at påpege en fremtidig hukommelseslek ved hjælp af GetDC (hwnd).