Skip to main content
GameDev.net gamedev.net
🔒 Locked

GUI renderer implementation. Double instancing. 9 Quads.

Started by Drop May 28, 2012 at 3:43 PM 1 replies 3.1k views
Original Post
Drop
Drop
[D3D11][C++][HLSL]
Hi! Im 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 Braynzars tutorial (http://www.braynzars...D3D11Instancing). But there was no scaling applyed to leaves. And heres 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!
NickUdell
NickUdell
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.
Sole Creator of Pigment - a procedural, block-base space trading sim.

PhD student working on medical imaging at the University of Southampton.

Enjoyer of games, films, books and cider.
xDarkice
xDarkice
You could take a look at my D3D9 implementation in Vocaluxe at Github. Though its in C# and uses D3D9, it should not be that much off from D3D11. It got all functions you were asking for.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.