Sign in to follow this  
Drop

GUI renderer implementation. Double instancing. 9 Quads.

Recommended Posts

Drop    115
[D3D11][C++][HLSL]
Hi! I`m new in DirectX 11. Need some help on implementation of GUI renderer.

I`m trying to make efficient GUI renderer that draws instanced canvases. Controls draws on canvases. Each canvas consists of 9 quads (rectangles). Each quad has to be arbitrary size, have arbitrary position, color and texture (if textured).

First attempt: carried away by idea of instancing.
-in vertex shader instance quad nine times, each different size, position color and texture (so canvas came out of it, for ex. window or button ).
-then instance that canvas several times, each different scale and position.

I saw implementation of double instancing of leaves on an instanced trees in "Instancing10" SDK demo and Braynzar`s tutorial ([url="http://www.braynzarsoft.net/index.php?p=D3D11Instancing"]http://www.braynzars...D3D11Instancing[/url]). But there was no scaling applyed to leaves. And here`s the problem. Also I tryed to learn sources from MyGUI and CEGUI, but its to complex and hard to understand for me for now.

Questions:
1. Is this possible to translate and scale instanced quads in vertex shader before translating and scaling canvas? How?
2. Is this optimal implementation? Its just an UI over a game itself, so it must be as lightweight as possible (each type of control can be instanced tens or even hundreds of times)
3. Is there better implementation? ( Vertex buffers?)

Feel free to post. I wiil be appreciated for any ideas, books, links and even chunks of code (C++, HLSL or a pseudocode).
Thanks in advance! Edited by Drop

Share this post


Link to post
Share on other sites
NickUdell    292
I think you're over engineering it.

In what situation do you expect a single control to be needed over 100 times on screen at once? You must have a very large monitor.

Sure, you can instance your controls, but frankly just writing to a vertex buffer and -maybe- indexing that should be enough for you.

Share this post


Link to post
Share on other sites
xDarkice    112
You could take a look at my D3D9 implementation in Vocaluxe at [url="https://github.com/xDarkice/Vocaluxe/blob/master/Vocaluxe/Lib/Draw/CDirect3D.cs"]Github[/url]. Though its in C# and uses D3D9, it should not be that much off from D3D11. It got all functions you were asking for.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this