Checks
Problem description
When a Construct 3 WebView2 export is captured in OBS Studio using Window Capture, OBS defaults to BitBlt instead of Windows Graphics Capture (WGC). OBS auto-selects WGC for Chromium-based windows by doing a partial string match on the top-level window class name, looking for "Chrome" or "Mozilla". Construct 3's Windows wrapper registers a custom top-level class name WindowsWebview2Wrapper which contains neither of these strings, so OBS defaults to BitBlt mode resulting in a white screen. I believe OBS's class matching list is intentionally conservative so a PR adding WindowsWebview2Wrapper would likely be rejected as too narrow (it's not a Microsoft-standardised class name and other WebView2 apps may not use it). I have submitted a PR regardless: obsproject/obs-studio#13477 and I would appreciate this issue being left open (even just tagged as external until something happens)
I understand that OBS and Scirra will likely point at each other here, since this issue exists in the middle ground between two projects that neither has strong incentive to own. Players will likely blame the developer of the game, and coverage by streamers is essential for indie game growth, so reducing friction here is very important to the community.
One Solution
Rename the registered top-level window class from WindowsWebview2Wrapper to a name containing "Chrome", for example ChromeWebView2Wrapper. This is still semantically accurate (WebView2 is Chromium-based) and would fix the issue.
A Better Solution
A solution that requires some coordination but is cleaner is to give the window a class that the OBS maintainers can more easily justify adding to the match list. Something like Construct3Webview2Wrapper is much more specific and would probably be acceptable. This is assuming that the name WindowsWebview2Wrapper is arbitrary and that renaming it isn't a breaking change.
Upload a project
Empty.c3p.zip
Steps to reproduce
- Open the game.
- Open OBS and select the game window as a recording source.
Observed result
The window appears solid white in OBS.
Expected result
The window appears normally in OBS.
Affected platforms
Windows
Affected browsers
Edge
Last unaffected release
N/A
First affected release
N/A
Additional remarks
No response
Platform information
Product: Construct 3 r486.2 (beta)
Browser: Chrome 148.0.7778.179
Browser engine: Chromium
Context: browser
Operating system: macOS 26.4.1
Device type: desktop
Device pixel ratio: 2
Logical CPU cores: 10
Approx. device memory: 16 GB
User agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36
Language setting: en-US
Audio sample rate: 48000 Hz
Audio output channels: 2
Audio output interpretation: speakers
Renderer: WebGPU
Compatibility mode: no
Supports GPU profiling: yes
Major performance caveat: no
Maximum texture size: 16384
Adapter details: apple/metal-3
Adapter features: bgra8unorm-storage, clip-distances, core-features-and-limits, depth-clip-control, depth32float-stencil8, dual-source-blending, float32-blendable, float32-filterable, indirect-first-instance, primitive-index, rg11b10ufloat-renderable, shader-f16, subgroups, texture-component-swizzle, texture-compression-astc, texture-compression-astc-sliced-3d, texture-compression-bc, texture-compression-bc-sliced-3d, texture-compression-etc2, texture-formats-tier1, texture-formats-tier2, timestamp-query
Checks
Problem description
When a Construct 3 WebView2 export is captured in OBS Studio using Window Capture, OBS defaults to BitBlt instead of Windows Graphics Capture (WGC). OBS auto-selects WGC for Chromium-based windows by doing a partial string match on the top-level window class name, looking for "Chrome" or "Mozilla". Construct 3's Windows wrapper registers a custom top-level class name
WindowsWebview2Wrapperwhich contains neither of these strings, so OBS defaults to BitBlt mode resulting in a white screen. I believe OBS's class matching list is intentionally conservative so a PR addingWindowsWebview2Wrapperwould likely be rejected as too narrow (it's not a Microsoft-standardised class name and other WebView2 apps may not use it). I have submitted a PR regardless: obsproject/obs-studio#13477 and I would appreciate this issue being left open (even just tagged asexternaluntil something happens)I understand that OBS and Scirra will likely point at each other here, since this issue exists in the middle ground between two projects that neither has strong incentive to own. Players will likely blame the developer of the game, and coverage by streamers is essential for indie game growth, so reducing friction here is very important to the community.
One Solution
Rename the registered top-level window class from
WindowsWebview2Wrapperto a name containing "Chrome", for exampleChromeWebView2Wrapper. This is still semantically accurate (WebView2 is Chromium-based) and would fix the issue.A Better Solution
A solution that requires some coordination but is cleaner is to give the window a class that the OBS maintainers can more easily justify adding to the match list. Something like
Construct3Webview2Wrapperis much more specific and would probably be acceptable. This is assuming that the nameWindowsWebview2Wrapperis arbitrary and that renaming it isn't a breaking change.Upload a project
Empty.c3p.zip
Steps to reproduce
Observed result
The window appears solid white in OBS.
Expected result
The window appears normally in OBS.
Affected platforms
Windows
Affected browsers
Edge
Last unaffected release
N/A
First affected release
N/A
Additional remarks
No response
Platform information
Product: Construct 3 r486.2 (beta)
Browser: Chrome 148.0.7778.179
Browser engine: Chromium
Context: browser
Operating system: macOS 26.4.1
Device type: desktop
Device pixel ratio: 2
Logical CPU cores: 10
Approx. device memory: 16 GB
User agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36
Language setting: en-US
Audio sample rate: 48000 Hz
Audio output channels: 2
Audio output interpretation: speakers
Renderer: WebGPU
Compatibility mode: no
Supports GPU profiling: yes
Major performance caveat: no
Maximum texture size: 16384
Adapter details: apple/metal-3
Adapter features: bgra8unorm-storage, clip-distances, core-features-and-limits, depth-clip-control, depth32float-stencil8, dual-source-blending, float32-blendable, float32-filterable, indirect-first-instance, primitive-index, rg11b10ufloat-renderable, shader-f16, subgroups, texture-component-swizzle, texture-compression-astc, texture-compression-astc-sliced-3d, texture-compression-bc, texture-compression-bc-sliced-3d, texture-compression-etc2, texture-formats-tier1, texture-formats-tier2, timestamp-query