带SDL的macOS上的电子覆盖高DPI支持 当我们运行C++节点ADDN时,电子高点DPI设置/标志不被尊重。节点插件本身工作正常,直到它与Electron打包

带SDL的macOS上的电子覆盖高DPI支持 当我们运行C++节点ADDN时,电子高点DPI设置/标志不被尊重。节点插件本身工作正常,直到它与Electron打包,electron,sdl-2,Electron,Sdl 2,我们的节点插件分别在另一个过程中(但从Electron内部调用)创建一个带有SDL的新窗口,该窗口尝试通过SDL\u window\u ALLOW\u HIGHDPI启用DPI 我们没有使用新浏览器窗口,并期望Chrome在这种情况下调整大小 在以下情况下不起作用: 通过电子运行。 在打包的.dmg之后运行 Info.plistHigh Resolution Capable中的键设置为YES——electron似乎会自动生成默认的Info.plist。(我们没有自行设置任何内容)也没有设置-

我们的节点插件分别在另一个过程中(但从Electron内部调用)创建一个带有SDL的新窗口,该窗口尝试通过
SDL\u window\u ALLOW\u HIGHDPI启用DPI

我们没有使用
新浏览器窗口
,并期望Chrome在这种情况下调整大小

在以下情况下不起作用:

  • 通过电子运行。
  • 在打包的.dmg之后运行
  • Info.plist
    High Resolution Capable
    中的键设置为YES——electron似乎会自动生成默认的Info.plist。(我们没有自行设置任何内容)也没有设置
    --extend info

    • 电子版:

      • “电子”:“^6.0.9”, “electron builder”:“^21.2.0”
    • 操作系统: macOS-10.14.6

    预期行为 程序应在高DPI模式下显示,并尊重传递给SDL的内容

    例如,我们应该收到一个SDL_WINDOWEVENT,它告诉我们以新的宽度和高度调整纹理大小

    实际行为 当将程序窗口(不是电子创建的窗口)移到视网膜屏幕(macbook pro)上时,它不会收到新的渲染器输出来调整大小,也不会出现高DPI感知

    当我们单独运行节点插件时,只要我们将屏幕移动到不同的DPI屏幕,每次移动窗口都会重新配置纹理

    复制 在SDL中设置以下内容:

    // init
    SDL_Window *window = SDL_CreateWindow(
          "App name", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height,
          SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI)
    
     SDL_Renderer *renderer =
          SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    
    // configure texture
    SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");
    
      int o_width = 0, o_height = 0;
      int ret = SDL_GetRendererOutputSize(ctx->renderer, &o_width, &o_height);
      if (ret != 0) {
        throw runtime_error("Could not get output renderer size\n");
      }
    
      printf("Output renderer size: %dx%d\n", o_width, o_height);
    
    问题
    • 当我们使用
      electron.
    • 如何在打包时使其成功工作

    解决方案:在Electron中,在Info.plist中为主进程设置的任何内容都不会等效地应用于Electron Helper进程,因为它们有自己的Info.plist

    我们通过以下方式对此进行了修补:

    cd dist/mac/Your.app/Contents/Frameworks/Your\ Helper.app/Contents
    /usr/libexec/PlistBuddy -c "add NSHighResolutionCapable bool true" Info.plist
    
    Electron 7.1或更低版本中未正确支持它


    解决方案:在Electron中,主进程的Info.plist中设置的任何内容都不会等效地应用于Electron Helper进程,因为它们有自己的Info.plist

    我们通过以下方式对此进行了修补:

    cd dist/mac/Your.app/Contents/Frameworks/Your\ Helper.app/Contents
    /usr/libexec/PlistBuddy -c "add NSHighResolutionCapable bool true" Info.plist
    
    Electron 7.1或更低版本中未正确支持它


    SDL\u GL\u GetDrawableSize(window,&w,&h)
    是否返回不同的大小?SDL\u GL\u GetDrawableSize(window,&w,&h)是否返回不同的大小?