Naphtalene
Topic Author
Posts: 4
Joined: 02 Dec 2020, 22:33

thread safety of IRenderer

14 Aug 2021, 15:57

Hi,
I need a way to block input events that are over a GUI View. i've seen that thread :
viewtopic.php?t=698

my question is, is it safe to operate on IRenderer on the main thread:
Ptr<IView> current_view;
IRenderer* uiRenderer = current_view->GetRenderer();

Visual* root = VisualTreeHelper::GetRoot(uiRenderer->GetContent());
HitTestResult hit = VisualTreeHelper::HitTest(root, Point(mousePosX, mousePosY));
if (hit.visualHit != 0)
{
    // block event
}
while render thread is operating on the same IRenderer in this way :
  
current_view->GetRenderer()->UpdateRenderTree();
current_view->GetRenderer()->RenderOffscreen();
...
current_view->GetRenderer()->Render();
 
User avatar
sfernandez
Site Admin
Posts: 2983
Joined: 22 Dec 2011, 19:20

Re: thread safety of IRenderer

16 Aug 2021, 18:11

That post is quite old and the API changed a bit in newer versions. The IView provides access to the Content so you don't need to interact with the IRenderer object for that:
Ptr<IView> current_view;
Visual* root = VisualTreeHelper::GetRoot(current_view->GetContent());
HitTestResult hit = VisualTreeHelper::HitTest(root, Point(mousePosX, mousePosY));
if (hit.visualHit != 0)
{
    // block event
}
 
Naphtalene
Topic Author
Posts: 4
Joined: 02 Dec 2020, 22:33

Re: thread safety of IRenderer

16 Aug 2021, 18:40

Alright i will do it this way, Thank you very much !
 
Naphtalene
Topic Author
Posts: 4
Joined: 02 Dec 2020, 22:33

Re: thread safety of IRenderer

16 Aug 2021, 18:59

Turns out
Ptr<IView> current_view;
current_view->GetContent(); // returns a FrameworkElement*
and
VisualTreeHelper::GetRoot(const Visual* ) //takes a Visual* 
Last edited by Naphtalene on 16 Aug 2021, 19:07, edited 3 times in total.
 
User avatar
sfernandez
Site Admin
Posts: 2983
Joined: 22 Dec 2011, 19:20

Re: thread safety of IRenderer

16 Aug 2021, 19:06

Yes, a FrameworkElement inherits from Visual, so you can pass the element to the GetRoot() function.
If you have compiler errors make sure to include <NsGui/FrameworkElement.h> in your code (or just the NoesisPCH.h we provide in our SDK if you are using precompiled headers).
 
Naphtalene
Topic Author
Posts: 4
Joined: 02 Dec 2020, 22:33

Re: thread safety of IRenderer

16 Aug 2021, 19:08

alright thanks again !
 
User avatar
jsantos
Site Admin
Posts: 3905
Joined: 20 Jan 2012, 17:18
Contact:

Re: thread safety of IRenderer

17 Aug 2021, 12:03

Just a clarification for future readers: all functions in the interface IRenderer must always be invoked from the render thread (in case you are using a separate thread for rendering)

Who is online

Users browsing this forum: No registered users and 55 guests