Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash on my computer #2559

Closed
Lombeelo opened this issue May 14, 2024 · 3 comments
Closed

Crash on my computer #2559

Lombeelo opened this issue May 14, 2024 · 3 comments
Labels
support Windows Win32 specific (not Cygwin or WSL)

Comments

@Lombeelo
Copy link

TLDR: glfw somehow broke on my computer (not anyone other's) and i don't know how to fix it without reinstalling Windows.

As I was developing my application using glfw, it stopped starting with those messages:

GLFW Error 65544: WGL: Failed to make context current
GLFW Error 65543: WGL: A forward compatible OpenGL context requested but WGL_ARB_create_context is unavailable
GLFW Error 65544: WGL: Failed to clear current context

I was using precompiled library packed with ImGui. GLFW crashed in glfwCreateWindow().

So... I checked the source code of GLFW for any hints and got nothing. Then i tried to open The Binding of Isaac: Repentance, wich also uses GLFW, and it silently crashes and leaves a crash dump with analysis result below.
isaacv1.7.9b.J835-20240514-225417-22520-22524.dmp


*******************************************************************************
*                                                                             *
*                        Exception Analysis                                   *
*                                                                             *
*******************************************************************************


KEY_VALUES_STRING: 1

    Key  : AV.Dereference
    Value: NullClassPtr

    Key  : AV.Fault
    Value: Read

    Key  : Analysis.CPU.mSec
    Value: 1250

    Key  : Analysis.DebugAnalysisManager
    Value: Create

    Key  : Analysis.Elapsed.mSec
    Value: 2413

    Key  : Analysis.Init.CPU.mSec
    Value: 1343

    Key  : Analysis.Init.Elapsed.mSec
    Value: 8528

    Key  : Analysis.Memory.CommitPeak.Mb
    Value: 110

    Key  : Timeline.Process.Start.DeltaSec
    Value: 1


FILE_IN_CAB:  isaacv1.7.9b.J835-20240514-225417-22520-22524.dmp

APPLICATION_VERIFIER_FLAGS:  0

CONTEXT:  (.ecxr)
eax=00000000 ebx=000003c0 ecx=00000000 edx=013d07e9 esi=01397a30 edi=00000000
eip=0113195d esp=0039f3d0 ebp=0039f3ec iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210202
isaac_ng!epoxy_handle_external_wglMakeCurrent+0x55a33d:
0113195d 8b9f18020000    mov     ebx,dword ptr [edi+218h] ds:002b:00000218=????????
Resetting default scope

EXCEPTION_RECORD:  (.exr -1)
ExceptionAddress: 0113195d (isaac_ng!epoxy_handle_external_wglMakeCurrent+0x0055a33d)
   ExceptionCode: c0000005 (Access violation)
  ExceptionFlags: 00000000
NumberParameters: 2
   Parameter[0]: 00000000
   Parameter[1]: 00000218
Attempt to read from address 00000218

PROCESS_NAME:  isaac-ng.exe

READ_ADDRESS:  00000218 

ERROR_CODE: (NTSTATUS) 0xc0000005 -                      0x%p                               0x%p.                      %s.

EXCEPTION_CODE_STR:  c0000005

EXCEPTION_PARAMETER1:  00000000

EXCEPTION_PARAMETER2:  00000218

STACK_TEXT:  
WARNING: Stack unwind information not available. Following frames may be wrong.
0039f3ec 0118fa12     686c6dcf 0082a370 0090ca58 isaac_ng!epoxy_handle_external_wglMakeCurrent+0x55a33d
0039f438 0105bce8     0133710c 005bf000 0105bce8 isaac_ng!epoxy_has_gl_extension+0x26712
0039f8a0 011bb7b6     00000001 0090ca58 0082a370 isaac_ng!epoxy_handle_external_wglMakeCurrent+0x4846c8
0039f8e8 76d3fcc9     005bf000 76d3fcb0 0039f954 isaac_ng!epoxy_has_wgl_extension+0x2b846
0039f8f8 771f7cbe     005bf000 186b0a3f 00000000 kernel32!BaseThreadInitThunk+0x19
0039f954 771f7c8e     ffffffff 77218d5f 00000000 ntdll!__RtlUserThreadStart+0x2f
0039f964 00000000     0142f310 005bf000 00000000 ntdll!_RtlUserThreadStart+0x1b


STACK_COMMAND:  ~0s; .ecxr ; kb

SYMBOL_NAME:  isaac_ng+55a33d

MODULE_NAME: isaac_ng

IMAGE_NAME:  isaac-ng.exe

FAILURE_BUCKET_ID:  NULL_CLASS_PTR_READ_c0000005_isaac-ng.exe!Unknown

OSPLATFORM_TYPE:  x86

OSNAME:  Windows 10

FAILURE_ID_HASH:  {29575a78-112d-c97e-61bc-96392d3ce593}

Followup:     MachineOwner
---------

Minimal reproducible example (my code trimmed):


#define GL_SILENCE_DEPRECATION
#if defined(IMGUI_IMPL_OPENGL_ES2)
#include <GLES2/gl2.h>
#endif
#include <GLFW/glfw3.h> // Will drag system OpenGL headers


// Main code
int main(int, char**) 
{
    if (!glfwInit())
        return 1;

    // Decide GL+GLSL versions
#if defined(IMGUI_IMPL_OPENGL_ES2)
    // GL ES 2.0 + GLSL 100
    const char* glsl_version = "#version 100";
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
    glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);
#elif defined(__APPLE__)
    // GL 3.2 + GLSL 150
    const char* glsl_version = "#version 150";
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);  // 3.2+ only
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);            // Required on Mac
#else
    // GL 3.0 + GLSL 130
    const char* glsl_version = "#version 130";
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
    //glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);  // 3.2+ only
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);            // 3.0+ only
#endif

    //glfwWindowHint(GLFW_VISIBLE, GLFW_FALSE);
    // Create window with graphics context
    GLFWwindow* glwindow = glfwCreateWindow(1600, 900, "test", nullptr, nullptr);
    if (glwindow == nullptr)
        return 1;
    return 0;
 }
@Lombeelo
Copy link
Author

I checked wglMakeCurrent in Windows, It returns ERROR_INVALID_HANDLE.

@Lombeelo
Copy link
Author

Lombeelo commented May 14, 2024

Found the culprit! Error happens when i have my second monitor connected :) Fuck you, Microsoft.
Btw when calling GetDC() inside EnumerateWindows() it gets dc for every window on every screen.

@dougbinks
Copy link
Contributor

As I understand it from your question on the forum this issue was resolved after you cleaned the GPU and display drivers and reinstalled them.

@dougbinks dougbinks added Windows Win32 specific (not Cygwin or WSL) support labels Jun 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
support Windows Win32 specific (not Cygwin or WSL)
Projects
None yet
Development

No branches or pull requests

2 participants