Repository: pyqtgraph/pyqtgraph

Issue:
[CI-fail] GLScatterPlotItem failing on Windows Builds
```
Traceback (most recent call last):

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\latebind.py", line 41, in __call__

    return self._finalCall( *args, **named )

TypeError: 'NoneType' object is not callable



During handling of the above exception, another exception occurred:



Traceback (most recent call last):

  File "D:\a\1\s\pyqtgraph\opengl\GLViewWidget.py", line 60, in addItem

    item.initializeGL()

  File "D:\a\1\s\pyqtgraph\opengl\items\GLScatterPlotItem.py", line 70, in initializeGL

    self.pointTexture = glGenTextures(1)

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\latebind.py", line 61, in __call__

    return self.wrapperFunction( self.baseFunction, *args, **named )

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\GL\exceptional.py", line 178, in glGenTextures

    baseFunction( count, textures)

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\latebind.py", line 45, in __call__

    return self._finalCall( *args, **named )

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\wrapper.py", line 664, in wrapperCall

    raise err

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\wrapper.py", line 657, in wrapperCall

    result = wrappedOperation( *cArguments )

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\platform\baseplatform.py", line 402, in __call__

    return self( *args, **named )

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\error.py", line 232, in glCheckError

    baseOperation = baseOperation,

OpenGL.error.GLError: GLError(

	err = 1282,

	description = b'invalid operation',

	baseOperation = glGenTextures,

	pyArgs = (1, c_ulong(0)),

	cArgs = (1, <cparam 'P' (00000158BE5A9310)>),

	cArguments = (1, <cparam 'P' (00000158BE5A9310)>)

)



During handling of the above exception, another exception occurred:



Traceback (most recent call last):

  File "<stdin>", line 7, in <module>

  File "D:\a\1\s\examples\GLScatterPlotItem.py", line 46, in <module>

    w.addItem(sp1)

  File "D:\a\1\s\pyqtgraph\opengl\GLViewWidget.py", line 62, in addItem

    self.checkOpenGLVersion('Error while adding item %s to GLViewWidget.' % str(item))

  File "D:\a\1\s\pyqtgraph\opengl\GLViewWidget.py", line 429, in checkOpenGLVersion

    ver = glGetString(GL_VERSION).split()[0]

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\platform\baseplatform.py", line 402, in __call__

    return self( *args, **named )

  File "c:\hostedtoolcache\windows\python\3.7.3\x64\lib\site-packages\OpenGL\error.py", line 232, in glCheckError

    baseOperation = baseOperation,

OpenGL.error.GLError: GLError(

	err = 1282,

	description = b'invalid operation',

	baseOperation = glGetString,

	cArguments = (GL_VERSION,)

)


Failed Scatter Plot Example Test Located in GLScatterPlotItem.py 
```

Likely related to #928 


Discussion:

Resolving patch:
diff --git a/pyqtgraph/opengl/glInfo.py b/pyqtgraph/opengl/glInfo.py
--- a/pyqtgraph/opengl/glInfo.py
+++ b/pyqtgraph/opengl/glInfo.py
@@ -6,10 +6,10 @@ class GLTest(QtOpenGL.QGLWidget):
     def __init__(self):
         QtOpenGL.QGLWidget.__init__(self)
         self.makeCurrent()
-        print("GL version:" + glGetString(GL_VERSION))
+        print("GL version:" + glGetString(GL_VERSION).decode("utf-8"))
         print("MAX_TEXTURE_SIZE: %d" % glGetIntegerv(GL_MAX_TEXTURE_SIZE))
         print("MAX_3D_TEXTURE_SIZE: %d" % glGetIntegerv(GL_MAX_3D_TEXTURE_SIZE))
-        print("Extensions: " + glGetString(GL_EXTENSIONS))
+        print("Extensions: " + glGetString(GL_EXTENSIONS).decode("utf-8").replace(" ", "\n"))
 
 GLTest()
 


Test patch: