justinstenning / Direct3DHook

DirectX Capture and Overlays by using Direct3D API hooks
http://spazzarama.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks
MIT License
582 stars 176 forks source link

Implement Overlay engine, supporting simple UI rendering #10

Closed justinstenning closed 6 years ago

justinstenning commented 10 years ago

Idea is to finish implementing an Overlay engine that can render for DirectX 9, 10 and 11.

KristjanLaane commented 9 years ago

Not sure if this would involve being able to overlay native WPF or Windows Forms controls? I have just asked a question regarding it, based on your work http://stackoverflow.com/questions/26611170/embed-button-control-into-existing-direct3d-application

Thanks for sharing!

KristjanLaane commented 9 years ago

I am trying to understand and finish implementing the ImageElement in your Overlay engine, to draw with Direct3D 11 a 2D red rectangle texture as achieved with Direct3D 9 here thanks to you - https://github.com/spazzarama/Direct3DHook/issues/27

However, I am pretty stuck due to my lack of knowledge.

Firstly I edited the ImageElement class like this:

public class ImageElement:Element
{
//        public System.IO.Stream ImageStream { get; set; }
    public string ImageLocation { get; set; }
    public float Alpha { get; set; }
    public System.Drawing.PointF Location { get; set; }

}

Then I instantiated one at https://github.com/spazzarama/Direct3DHook/blob/master/Capture/Hook/DXHookD3D11.cs#L367

                var imageElement = new ImageElement();
                string dir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                string filename = dir + @"\gridW1024H768.jpg";
                imageElement.ImageLocation = filename;
                imageElement.Alpha = 1;
                imageElement.Location = new PointF(50, 50);
                overlay.Elements.Add(imageElement);

But how do you then initialize the texture here https://github.com/spazzarama/Direct3DHook/blob/master/Capture/Hook/DX11/DXOverlayEngine.cs#L110

                else if (imageElement != null)
                {
                    // TODO: load image element into texture
                }

And finally how do you actually draw it here https://github.com/spazzarama/Direct3DHook/blob/master/Capture/Hook/DX11/DXOverlayEngine.cs#L147

                else if (imageElement != null)
                {

                }
justinstenning commented 9 years ago

I think I have written the ImageElement for D3D 11 in another project, I'll see what state it is in and bring across to this project if all good.

EDIT: There's a few changes I made to the DX11 DXSprite, DXOverlayEngine, and a few additional classes. I'll look to getting these committed in the next week.

KristjanLaane commented 9 years ago

thanks ahead!

KristjanLaane commented 9 years ago

these improvements do not exist on any other branch do they?

KristjanLaane commented 9 years ago

any luck with the commits Justin?

justinstenning commented 9 years ago

I've mostly finished putting it together from a number of projects here, unfortunately I'm busy for the next week or so, will try to get it sorted after then.

justinstenning commented 9 years ago

I've got it all together, will try to commit before next week.

justinstenning commented 9 years ago

Image overlay support for D3D11 has been committed, this also has preliminary support for GPU image resizing. ddb309668c7eb545fda9043816f21c79807f8a69

KristjanLaane commented 9 years ago

thanks ever so much, I'll give it a whirl soon!

justinstenning commented 6 years ago

Closing as API now added to display overlay. Other improvements to be in new issues.