New user on Windows, when running examples getting errors

227 views
Skip to first unread message

Mario Ricci

unread,
Aug 1, 2022, 2:38:20 PM8/1/22
to OpenSceneGraph Users
Hi all,

Very new to OSG. My main question is how to get some of the examples running with large amounts of data on one screen, and how to get it to use my Nvidia GPU instead of integrated graphics.  I'd like to test performance and have at least one example running properly.

I wasn't sure how to build and none of the walkthroughs worked for me, but basically I used the GUI version of cmake on Windows 11 and pointed it to the code and a build directory.  After hitting the Configure and Generate buttons as well as adding a BUILD_OSG_EXAMPLES flag, I had a solution which I opened in VS 2022 and seemed to properly build.

I have multiple monitors and a Nvidia Quadro T2000 as well as the integrated intel graphics.  When running examples things seem a bit broken.  I do get graphics across both monitors and can zoom etc., but they don't look that great (not sure if that's how they are supposed to look).  

One example I tried was osggpuculld.exe, which displays this if I scroll in very far (attachment osg cull example.png).  I also see the following on the CLI:
```
 .\osggpuculld.exe
void StateSet::setGlobalDefaults() ShaderPipeline disabled.
void StateSet::setGlobalDefaults() ShaderPipeline disabled.
VERTEX glCompileShader "static_cull_vertex" FAILED
VERTEX Shader "static_cull_vertex" infolog:
ERROR: 0:6: 'R32I' : syntax error syntax error


VERTEX Shader "static_cull_vertex" infolog:
ERROR: 0:6: 'R32I' : syntax error syntax error


VERTEX Shader "static_cull_vertex" infolog:
ERROR: 0:6: 'R32I' : syntax error syntax error


glLinkProgram 0000028ACCB02AA0"static_cull" FAILED
glLinkProgram 0000028ACCB02AA0"static_cull" FAILED
Program "static_cull" infolog:
Attached vertex shader is not compiled.
```

I've tried other examples and used some built in data to view the dump truck etc., but nothing has texture and everything uses my integrated graphics.

Does anyone know how to:
  1. View an example on one screen
  2. Use the proper GPU
  3. Find a page controls in examples (e.g. what does mouse do? what do key commands do?)
  4. Get a big model combined into an example to check performance
Thanks in advance!

osg cull example.png

alexandre.vai...@gmail.com

unread,
Aug 2, 2022, 10:17:45 AM8/2/22
to OpenSceneGraph Users
Hello Mario!


> how to get it to use my Nvidia GPU instead of integrated graphics

Usually I need to go through this process:

  1. From the 'NVIDIA Control Panel', go to '3D Settings' > 'Manage 3D Settings'.
  2. Select the tab 'Program Settings'.
  3. In the section 1., click on 'Add' and select your own .exe, then in section 2. select the 'High-performance NVIDIA processor'.
  4. Click 'Apply'. Restart your program; it should now use the NVIDIA processor.

I had the possibility to further "tune" the parameters for my programs on a previous laptop, but I can no longer change anything on this one (e.g. enable/disable vsync).


> Find a page controls in examples

Unfortunately, there is no repository for this, nor a mechanisms that lists the keys/buttons handled and what they do. You'll need to check the code of the different classes that handle movement to see what they do and how they do it. In  osggpucull, the entry point is probably around this code:

    osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;

    keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::TrackballManipulator() );
    keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() );
    keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() );
    keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() );


I hope this helps you get a bit further in your tests.

- Vaillancourt

Mario Ricci

unread,
Aug 2, 2022, 3:32:39 PM8/2/22
to OpenSceneGraph Users
Thanks Vaillancourt.  I knew about that whole configuring the exe process, but if I made a product with that you aren't going to ask a customer to do that, right?  I did some searching and there was some old switches and variables, but I couldn't get any to work.  Is there no other way to configure gpu programmatically?

Also, do you know why I'd be getting those errors?  Could it be a build issue?

Alexandre Vaillancourt

unread,
Aug 2, 2022, 8:21:07 PM8/2/22
to osg-...@googlegroups.com
Hello Mario,

> but if I made a product with that you aren't going to ask a customer to do that, right?

You're right. I'm not the one responsible for doing this at my workplace, so I don't know all the ins and outs, but AFAIK, you need to go through the API (https://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/group__drsapi.html) to create a profile and add your app to it. We do this through our Installer app and the installation process, but perhaps you could integrate it into your own app and have it configure itself w.r.t. the NVIDIA drivers. (That would likely require that you then run your app with administrator privileges, maybe?)

> Also, do you know why I'd be getting those errors?

I'm not sure. I tried to run the same example as you did "naturally" on my laptop, and I got the following errors, with a garbage display:

VERTEX glCompileShader "static_cull_vertex" FAILED
VERTEX Shader "static_cull_vertex" infolog:
ERROR: 0:6: 'R32I' : syntax error syntax error


glLinkProgram 0000024FD95BA760"static_cull" FAILED

Program "static_cull" infolog:
Attached vertex shader is not compiled.

Warning: detected OpenGL error 'invalid operation' at after pcp->apply(Unfiorm&) in GLObjectsVisitor::apply(osg::StateSet& stateset), unifrom name:  indirectCommand0
VERTEX glCompileShader "static_draw_0_vertex" FAILED
VERTEX Shader "static_draw_0_vertex" infolog:
ERROR: 0:34: 'RGBA32F' : syntax error syntax error


glLinkProgram 0000024FD95BAAE0"static_draw_0" FAILED
Program "static_draw_0" infolog:

Attached vertex shader is not compiled.

Warning: detected OpenGL error 'invalid operation' at after pcp->apply(Unfiorm&) in GLObjectsVisitor::apply(osg::StateSet& stateset), unifrom name:  indirectTarget
VERTEX glCompileShader "static_draw_1_vertex" FAILED
VERTEX Shader "static_draw_1_vertex" infolog:
ERROR: 0:34: 'RGBA32F' : syntax error syntax error


glLinkProgram 0000024FD95BB100"static_draw_1" FAILED
Program "static_draw_1" infolog:

Attached vertex shader is not compiled.

Warning: detected OpenGL error 'invalid operation' at after pcp->apply(Unfiorm&) in GLObjectsVisitor::apply(osg::StateSet& stateset), unifrom name:  indirectTarget
VERTEX glCompileShader "dynamic_cull_vertex" FAILED
VERTEX Shader "dynamic_cull_vertex" infolog:
ERROR: 0:9: 'R32I' : syntax error syntax error


glLinkProgram 0000024FD95BABC0"dynamic_cull" FAILED
Program "dynamic_cull" infolog:

Attached vertex shader is not compiled.

Warning: detected OpenGL error 'invalid operation' at after pcp->apply(Unfiorm&) in GLObjectsVisitor::apply(osg::StateSet& stateset), unifrom name:  dynamicInstancesData
VERTEX glCompileShader "dynamic_draw_0_vertex" FAILED
VERTEX Shader "dynamic_draw_0_vertex" infolog:
ERROR: 0:37: 'RGBA32I' : syntax error syntax error


glLinkProgram 0000024FD95BB8E0"dynamic_draw_0" FAILED
Program "dynamic_draw_0" infolog:

Attached vertex shader is not compiled.

Warning: detected OpenGL error 'invalid operation' at after pcp->apply(Unfiorm&) in GLObjectsVisitor::apply(osg::StateSet& stateset), unifrom name:  dynamicInstancesData

C:\dev\OpenSceneGraph-build-x64\bin\osggpucullrd.exe (process 20928) exited with code 0.
Press any key to close this window . . .

Then I went through the process I explained earlier (actually, I added the whole directory rather than the individual .exe) and then running the example went fine. So apparently, the issue seems to be that the program is not running with the proper chip, but you seem to mention you have made the proper adjustments. That being said, I have a "NVIDIA GeForce RTX 3050 Ti Laptop GPU", not a Nvidia Quadro T2000 like you have; according to this API doc (https://docs.nvidia.com/gameworks/content/gameworkslibrary/coresdk/nvapi/modules.html), there seems to be additional API functions to handle some Quadro features, but I don't know if it's related to the issue you're having.

I don't think the issue is caused by issues with compilation, as you would not be able to get to shader compilation (I think, I'm not the shader expert).

FWIW, this commit on github is essentially how I generate the solution with CMake. This commit doesn't have the examples enabled, but you can enable them by changing the flag BUILD_OSG_EXAMPLES to ON: https://github.com/vaillancourt/OpenSceneGraph/commit/350924df765a4e43289e5cc77ea6271f9d5dd85d

I hope it helps.

--
Vaillancourt


--
You received this message because you are subscribed to a topic in the Google Groups "OpenSceneGraph Users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/osg-users/nxZn2g45SsE/unsubscribe.
To unsubscribe from this group and all its topics, send an email to osg-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/cf4311d0-f2f9-40a8-8fdb-9f002dc9a9f2n%40googlegroups.com.

Christopher Jaquet

unread,
Aug 3, 2022, 2:27:08 AM8/3/22
to OpenSceneGraph Users

> but if I made a product with that you aren't going to ask a customer to do that, right?

You can try the flag on the `DisplaySettings` class that can enable the dedicated GPU when you initialise OSG. In the osggpucull example below the line

    osg::DisplaySettings::instance()->setNumMultiSamples( 4 );

you can add

    osg::DisplaySettings::instance()->setNvOptimusEnablement( true );

and see if that works. This appears to be nvidia-only but you can probably modify the OSG code to do the same for amd GPUs (see this stackoverflow article which may help: https://stackoverflow.com/questions/17458803/amd-equivalent-to-nvoptimusenablement ).

I generally compile OSG only in GL3 mode (i.e. the old fixed function pipeline is disabled) and very few of the examples work as expected out of the box. Make sure you have the `OSG_FILE_PATH` environment variable set to the folder containing the data resources. (You can get a zip of the data resources from https://www.openscenegraph.com/index.php/download-section/data )

> View an example on one screen 

Most of the examples will accept the `--screen <num>` command line option which you can use to choose a screen number to display on a single screen. Alternatively you can use the `--window <x y w h>` (where x,y is the position and w,h is the width/height) option to display in a window.

Hope this helps.

Dean, James (FAA)

unread,
Aug 3, 2022, 8:49:28 AM8/3/22
to osg-...@googlegroups.com
This has worked for my application:

//these will force use of dedicated GPU if available
extern "C"
{
      __declspec(dllexport) unsigned long NvOptimusEnablement = 0x00000001;
}
extern "C"
{
      __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}

First is for NVIDIA , second is AMD

From: osg-...@googlegroups.com <osg-...@googlegroups.com> on behalf of Christopher Jaquet <chris...@gmail.com>
Sent: Wednesday, August 3, 2022 1:27 AM
To: OpenSceneGraph Users <osg-...@googlegroups.com>
Subject: Re: [osg-users] Re: New user on Windows, when running examples getting errors
 
You received this message because you are subscribed to the Google Groups "OpenSceneGraph Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to osg-users+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/osg-users/a0ed30f9-93d7-407c-be54-f8470f0eee55n%40googlegroups.com.

Mario Ricci

unread,
Aug 10, 2022, 1:05:42 PM8/10/22
to OpenSceneGraph Users
How did you add the entire directory?  I just know how to add a singular exe, and the windows configuration in System->Display->Graphics doesn't have an option to multi-add or add a directory

Mario Ricci

unread,
Aug 10, 2022, 3:42:36 PM8/10/22
to OpenSceneGraph Users
All these suggestions really helped me, thanks very much!

alexandre.vai...@gmail.com

unread,
Aug 18, 2022, 10:24:49 AM8/18/22
to OpenSceneGraph Users
Hello!

For me, on Windows 11:

1. WinKey + start typing NVIDIA to bring up the NVIDIA Control Panel
2. Going to 3D Settings > Manage 3D Settings
3. Select Program Settings tab
4. "1. Select a program to customise:" > Click on the Add button; a dialog shows up
5. Click on "Browse..."
6. Navigate to the desire folder
7. There are three buttons at the bottom of the file selection dialog, the two usual "Open" and "Cancel", with another, less usual "Add Current Folder". Click "Add Current Folder".

I hope it helps!
Reply all
Reply to author
Forward
0 new messages