nmwsharp / nmwsharp/polyscope

Running polyscope on remote servers [python]

Open
#99 9 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
C++
Stars
2.2k
Forks
242
Avg merge
11m
Merged PRs (30d)
1

Description

context

I am trying to run the python polyscope library in a headless environment (running some tests in CI); but that has presented some challenges. This issue is the same underlying cause as #82 .

Environment

  • docker container
  • OS: ubuntu
  • Python 3.8.6
  • Polyscope: 0.1.6

polyscope installed with: python -m pip install polyscope

Partial fixes

I worked through a couple of issues but couldn't get everything working (yet):

apt-get install -y libglfw3-dev
apt-get install -y xvfb
export DISPLAY=:99.0
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &

There error I get when running python -c "import polyscope as ps; ps.init() is the following:

[polyscope] Backend: openGL3_glfw -- Loaded openGL version: 3.3 (Core Profile) Mesa 18.3.6
[polyscope] Polyscope OpenGL Error!  Type: Invalid enum
GLError() after shader compilation! Program text:


// tag ${ GLSL_VERSION }$
// from rule: GLSL_VERSION
#version 330 core

      in vec3 a_position;
      out vec2 tCoord;

      void main()
      {
          tCoord = (a_position.xy+vec2(1.0,1.0))/2.0;
          gl_Position = vec4(a_position,1.);
      }

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/conda/lib/python3.8/site-packages/polyscope/core.py", line 12, in init
    psb.init(backend)
RuntimeError: OpenGl error occurred. Text: Invalid enum
[1] + Done(1)                    Xvfb :99 -screen 0 1024x768x24 1>/dev/null 2>&1

I've put the debugging process I've been through so far and would appreciate any tips on where to go next.

Thanks for an already fantastic project! Keep up the great work 😀

Missing glfw

The first error you might encounter when running polyscope in a headless environment is a missing glfw the error looks like issue #82:
running the command: python -c "import polyscope as ps; ps.init() throws the following error:

backend = ''

    def init(backend=""):
        """Initialize Polyscope"""
    
        cwd_before = os.getcwd() # see note below
    
>       psb.init(backend)
E       RuntimeError: [polyscope] ERROR: Failed to initialize glfw

/opt/conda/envs/test/lib/python3.8/site-packages/polyscope/core.py:12: RuntimeError
Fix on ubuntu

The fix to that is to install glfw

sudo apt-get install libglfw3

Missing display

re-running the command: python -c "import polyscope as ps; ps.init()" throws the following error:

GLFW emitted error: X11: The DISPLAY environment variable is missing
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/conda/lib/python3.8/site-packages/polyscope/core.py", line 12, in init
    psb.init(backend)
RuntimeError: [polyscope] ERROR: Failed to initialize glfw

v

Adding a display (to /dev/null)
apt-get install -y xvfb
export DISPLAY=:99.0
Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &

(credit for this fix to: https://github.com/pyvista/gl-ci-helpers)

OpenGL error

re-running the command: python -c "import polyscope as ps; ps.init()" throws the following error:

[polyscope] Backend: openGL3_glfw -- Loaded openGL version: 3.3 (Core Profile) Mesa 18.3.6
[polyscope] Polyscope OpenGL Error!  Type: Invalid enum
GLError() after shader compilation! Program text:


// tag ${ GLSL_VERSION }$
// from rule: GLSL_VERSION
#version 330 core

      in vec3 a_position;
      out vec2 tCoord;

      void main()
      {
          tCoord = (a_position.xy+vec2(1.0,1.0))/2.0;
          gl_Position = vec4(a_position,1.);
      }

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/opt/conda/lib/python3.8/site-packages/polyscope/core.py", line 12, in init
    psb.init(backend)
RuntimeError: OpenGl error occurred. Text: Invalid enum
[1] + Done(1)                    Xvfb :99 -screen 0 1024x768x24 1>/dev/null 2>&1

At this point, I've not found a fix yet.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the reported python -c "import polyscope as ps; ps.init()" failure in the Ubuntu/Xvfb environment, then read the initialization path shown in polyscope/core.py and compare it with issue #82. Done means ps.init() succeeds in the headless CI-style setup without the GLFW or OpenGL errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
docker, python, ubuntu
Domain
devops, testing
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.