Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New vtkXOpenGLRenderWindow error unable to find valid OpenGL 3.2 or later implementation #430

Open
durack1 opened this issue Dec 19, 2019 · 14 comments

Comments

@durack1
Copy link
Member

durack1 commented Dec 19, 2019

I am hitting a new error that has stopped me in my tracks using vcs8.2. Below is the error text (truncated). The issue is on a terminal on a CDAT8.2 (no-mesa) environment on a RHEL7 machine:

(Pdb) import vcs; x = vcs.init()
~anaconda3/envs/cdat82Py3/lib/python3.7/site-packages/unidata/__init__.py:2: UserWarning: unidata package is deprecated please use genutil.udunits instead of unidata.udunits
  warnings.warn("unidata package is deprecated please use genutil.udunits instead of unidata.udunits")
(Pdb) x.plot(climSlice)
2019-12-19 10:54:13.161 (  10.526s) [        322A2740]vtkOpenGLRenderWindow.c:761    ERR| vtkXOpenGLRenderWindow (0x55dc36b27d90): Unable to find a valid OpenGL 3.2 or later implementation. Please update your video card driver to the latest version. If you are using Mesa please make sure you have version 11.2 or later and make sure your driver in Mesa supports OpenGL 3.2 such as llvmpipe or openswr. If you are on windows and using Microsoft remote desktop note that it only supports OpenGL 3.2 with nvidia quadro cards. You can use other remoting software such as nomachine to avoid this issue.
2019-12-19 10:54:13.162 (  10.527s) [        322A2740]   vtkShaderProgram.cxx:447    ERR| vtkShaderProgram (0x55dc33a07560): 1: #version 150
2: #ifndef GL_ES
3: #define highp
4: #define mediump
5: #define lowp
6: #endif // GL_ES
7: #define attribute in
8: #define varying out                                                                                                                                                                            
9:                                                                                                                                                                                                
10: #define haveColors                                                                                                                                                                            
11: in vec2 vertexMC;                                                                                                                                                                             
12: uniform mat4 WCDCMatrix;                                                                                                                                                                      
13: uniform mat4 MCWCMatrix;                                                                                                                                                                      
14: #ifdef haveColors                                                                                                                                                                             
15: in vec4 vertexScalar;                                                                                                                                                                         
16: out vec4 vertexColor;                                                                                                                                                                         
17: #endif                                                                                                                                                                                        
18: #ifdef haveTCoords                                                                                                                                                                            
19: in vec2 tcoordMC;                                                                                                                                                                             
20: out vec2 tcoord;                                                                                                                                                                              
21: #endif                                                                                                                                                                                        
22: #ifdef haveLines                                                                                                                                                                              
23: in vec2 tcoordMC;                                                                                                                                                                             
24: out float ldistance;                                                                                                                                                                          
25: #endif                                                                                                                                                                                        
26: void main() {                                                                                                                                                                                 
27: #ifdef haveColors                                                                                                                                                                             
28: vertexColor = vertexScalar;                                                                                                                                                                   
29: #endif                                                                                                                                                                                        
30: #ifdef haveTCoords                                                                                                                                                                            
31: tcoord = tcoordMC;                                                                                                                                                                            
32: #endif                                                                                                                                                                                        
33: #ifdef haveLines                                                                                                                                                                              
34: ldistance = tcoordMC.x;                                                                                                                                                                       
35: #endif                                                                                                                                                                                        
36: vec4 vertex = vec4(vertexMC.xy, 0.0, 1.0);                                                                                                                                                    
37: gl_Position = vertex*MCWCMatrix*WCDCMatrix; }                                                                                                                                                 
...

Complete error output:
cdat82py3_vcsBug-vtkOpenGLRenderWindow.txt

conda list output:
cdat82py3_conda_list.txt

@downiec @forsyth2 @muryanto1 ping

@durack1
Copy link
Member Author

durack1 commented Dec 19, 2019

@danlipsa ping

@durack1
Copy link
Member Author

durack1 commented Dec 19, 2019

@danlipsa this is on a RHEL7 machine, using VNC. I'm almost certain that I have hit a very similar issue before (RHEL6 and a much older version of CDAT). Do you remember what the fix required?

@danlipsa
Copy link
Contributor

@durack1 You should be able to use osmesa fine. if you want to see a window on the screen through vnc you need to follow the instructions in:
https://github.com/CDAT/cdat/wiki/Remote-server-setup-for-VNC
@sankhesh wrote them and both me and him were able to set this up on our recent ubuntu machines.

Indeed, those did not work for rhel6 as the software there was too old. Before you go through this, you have to make sure that OpenGL is setup on that machine correctly. Try to run vcs at the machine console = keyboard and monitor attached to the machine.

@durack1
Copy link
Member Author

durack1 commented Dec 19, 2019

@danlipsa thanks for the reply, I had recalled some interaction on this a while back and the URL above is exactly what I remembered, just very poorly, thanks for providing a review.

A problem that we have at LLNL is that the only approved software is VNC provided by RealVNC, or for RHEL7 TigerVNC 1.8.0 or above (which ships with RHEL7). TurboVNC is not approved, and I will have to check on the status for VirtualGL.

Another issue is that most of us are not allowed in the building where these workstations are housed, so testing the OpenGL configuration is not something that is easy to do. If we had a recipe for configuration this could be implemented across machines, but it would have to be done with approved software.

What are the chances that a RHEL7, RealVNC/TigerVNC example could be spun up? I can imagine this will take sometime, and not sure if you have the cycles available to make it happen, certainly not soon?

@durack1
Copy link
Member Author

durack1 commented Dec 19, 2019

@danlipsa I have just requested approval for VirtualGL (2.6.3) and TurboVNC (2.2.3), but I am not holding my breath as they already have TigerVNC (1.9.0) approved

@cdatrobot
Copy link

cdatrobot commented Dec 19, 2019 via email

@durack1
Copy link
Member Author

durack1 commented Dec 19, 2019

@cdatrobot (who are you BTW) yeah, I recalled this too, which was the reason why the solution went nowhere.

@danlipsa
Copy link
Contributor

That was me, responding directly through email instead of responding from github. That's disapointing that it could not figure out that's the same person - I have the same email address in my profile.

@durack1
Copy link
Member Author

durack1 commented Dec 19, 2019

@danlipsa oh well this really seems to be going nowhere, it's a bummer as VCS works better than other graphics packages.

I'll see if we get approval for VirtualGL and TurboVNC but I am not holding my breath. Is there anyway that this could be enabled for VNC sessions without having the jump through all the confusing additional package hoops?

@danlipsa
Copy link
Contributor

Another software that works well for remote OpenGL is nomachine. It's a lot easier to setup but it is not multi-user. You completely control the remote machine. I currently use this instead of vnc when I work from home because it is faster. But I don't think it would apply for your case = multiple users accessing the same server.

@durack1
Copy link
Member Author

durack1 commented Dec 19, 2019

@danlipsa thanks, it seems there is already a request in for nomachine (6.8.1.1) for linux (RHEL7) so hopefully this is approved, is the configuration trivial?

@danlipsa
Copy link
Contributor

Yes, it is. You just install it and connect. But only one user can use the machine at a time. Not sure what happens if several users connect. They either fight for mouse / keyboard, or they get an error.

@durack1
Copy link
Member Author

durack1 commented Dec 19, 2019

@danlipsa, although the docs are a little hard to read, it would seem that the licensed version enables multiple concurrent connections, see https://www.nomachine.com/DT03O00136, so either 4 (Workstation) or 10 (Small Business Server) which I think would work perfectly for our needs

Scalability

This solution provides individual instances of the remote desktops (virtual desktops)
and applications hosted on a single Linux computer. Workstation allows 4 virtual
desktop sessions, Small Business Server allows 10 and Terminal Server provides
an unlimited number. In the case of a larger number of users, you may consider
setting up a multi-host environment with NoMachine Enterprise Terminal Server
to distribute virtual desktops and applications among Terminal Server Node hosts.
This solution allows load-balancing of sessions among multiple hosts.
High-availability of virtual desktops is also possible by setting-up a failover cluster
between two NoMachine Enterprise Terminal Server hosts.

@danlipsa
Copy link
Contributor

Yes, indeed that seems to be the case. That is cool! Then all you guys have to do is pay the licence. 😄

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants