Search code examples
pythonopenglrender

NameError: name 'glPushMatrix' is not defined


Try to run a test code for stable baselines gym

import gym

from stable_baselines3 import A2C

env = gym.make("CartPole-v1")

model = A2C("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=10_000)

obs = env.reset()
for i in range(100):
    action, _state = model.predict(obs, deterministic=True)
    obs, reward, done, info = env.step(action)
    env.render()
    if done:
      obs = env.reset()

found the error "NameError: name 'glPushMatrix' is not defined"

Traceback (most recent call last):
  File "test_cart_pole.py", line 14, in <module>
    env.render()
  File "/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/gym/core.py", line 295, in render
    return self.env.render(mode, **kwargs)
  File "/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/gym/envs/classic_control/cartpole.py", line 229, in render
    return self.viewer.render(return_rgb_array=mode == "rgb_array")
  File "/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/gym/envs/classic_control/rendering.py", line 126, in render
    self.transform.enable()
  File "/Users/xxx/opt/anaconda3/lib/python3.8/site-packages/gym/envs/classic_control/rendering.py", line 232, in enable
    glPushMatrix()
NameError: name 'glPushMatrix' is not defined

I tried "pip install PyOpenGL PyOpenGL_accelerate", which didn't help also uninstall pyglet and install again , did't work too Any Idea???


Solution

  • Just had the same problem. Fixed it by installing an older version of pyglet:

    $ pip install pyglet==1.5.27
    

    I don't know if this is the latest version that avoids the problem, but it works.