Comments (2)
Keep in mind that the frame pool represents shared textures between your application and the DWM. We don't allow applications indiscriminate access to the underlying textures because we wouldn't be able to guarantee that they aren't currently being drawn to by the compositor. This is also why you should never cache the texture we provide. However, as long as you are holding onto the Direct3D11CaptureFrame
object, the texture is yours. When you're done with it, call Close/Dispose (for C++/C# respectively) to return the frame back to the frame pool. Although I'm not familiar with OpenGL/DirectX interop, so I can't advice if it's safe to create interop handles for each frame pool texture.
Unfortunately, I think you won't be able to avoid the copy here. I would create one interop texture that matches the dimensions of the frame pool's textures and copy frames into that texture when frames arrive. Then you can turn around and draw the contents of the interop texture using OpenGL.
from windows.ui.composition-win32-samples.
Thank you for taking the time to answer, Robert.
I agree that it's best not to expose the underlying textures outside of the controlled way it's being done now with TryGetNextFrame, most times than not it would probably cause issues. I guess my issue lies more with the interop. Technically I think that it should work if I create the interop on the frame pool textures and ensure that they are not being modified outside of the newFrameCallback, but only if A) The underlying textures are created with flags that are supported, B) the ID3D11Texture2D object returned by getFrame stays the same in memory so that it will always be the same I get from the frame.
I suspect that it's A) that fails here. I suppose I'll leave it as it is, the CopyResource function doesn't move it to the CPU in the end so the overhead is not that bad I suppose, the bottleneck lies somewhere else.
Thank you!
from windows.ui.composition-win32-samples.
Related Issues (20)
- Some samples use `WindowsRuntimeMarshal` class, that is no longer available in .NET 5+ HOT 4
- Cannot use IGraphicsCaptureItemInterop::CreateForWindow with electron apps HOT 6
- This repo is missing important files HOT 4
- How to capture Windows10/11 Virtual Desktop via Windows.Graphics.Capture ? HOT 2
- Accessing screen capture image bytes with MapFlags.DoNotWait for better CPU usage HOT 3
- Can I do successive captures on two different windows HOT 8
- ScreenCapture Sample - write capture stream to disk mp4? HOT 5
- Capture area of a monitor HOT 4
- Memory Leak? HOT 5
- BSODs on 4 separate Hard Drives HOT 3
- Multiple screen captures in a loop cause explorer.exe and native Windows app to lag? HOT 11
- Capture OnFrame Callback very slow on Win11 23H2 HOT 7
- access_denied in CreateForMonitor in some cases HOT 5
- Cannot catch errors in CreateCaptureItemForWindow HOT 3
- WGC CaptureFrame returns wrong SystemRelativeTime in window capture mode HOT 2
- Cursor may become invisible when recording some fullscreen games using WGC HOT 6
- Frame has issue after change window state (maximize from normal/ normal from maximize/ ...) HOT 1
- ScreenCaptureforHWND sample leaks handles leading to "Out of memory" crash HOT 1
- ScreenCaptureforHWND sample main thread hang HOT 2
- ScreenCaptureforHWND: How to get the byte data of the captured frame? HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from windows.ui.composition-win32-samples.