[Qt5] problems w instance rendering

I’m trying to learn OpenGL and Qt5 in parallel, and decide to try and use primarily Qt5-functions (with a few exceptions when I’ve been unable to get the Qt5-functions to work). I’ve gotten the basics down for my “Hello cubes”, but am now having issues as I try to handle instancing in the vertex buffer instead of individual draw calls.

The project in full can be found at https://github.com/anderslindho/graphy, where the master branch contains a stable non-instance buffer approach, and the instancing branch contains my latest attempt at instancing.

The core snippets that I have changed are:

(lines 160–176 in opengl.py)

    for i, j, k in itertools.product(
            range(0, 100, 2),
            range(0, 100, 2),
            range(0, 100, 2)
    ):
        translation = pyrr.Vector3([0.0, 0.0, 0.0])
        translation.x = i + self.instance_offset
        translation.y = j + self.instance_offset
        translation.z = k + self.instance_offset
        self.instance_array.append(translation)

    self.len_of_instance_array = len(self.instance_array)
    self.instance_array = np.array(self.instance_array, dtype=np.float32).flatten()

    self.instance_vbo.create()
    self.instance_vbo.bind()
    self.instance_vbo.allocate(self.instance_array, self.instance_array.nbytes)

(lines 192–196 in opengl.py)

    self.glEnableVertexAttribArray(2)
    self.glVertexAttribPointer(
        2, 3, gl.GL_FLOAT, gl.GL_FALSE, 0, VoidPtr(0)
    )
    self.glVertexAttribDivisor(2, 1)

…and the draw call is:

(lines 99–117 in opengl.py)

    def render(self) -> None:
    self.program.bind()
    vao_binder = QOpenGLVertexArrayObject.Binder(self.vao)

    # TODO: switch to Qt functions (doesn't work)
    gl.glUniformMatrix4fv(self.projection_loc, 1, gl.GL_FALSE, self.projection)
    view = self.camera.get_view_matrix()
    gl.glUniformMatrix4fv(self.camera_loc, 1, gl.GL_FALSE, view)

    self.glDrawElementsInstanced(
        gl.GL_TRIANGLES,
        len(self.shape.indices),
        gl.GL_UNSIGNED_INT,
        VoidPtr(0),
        self.len_of_instance_array
    )

    self.program.release()
    vao_binder = None

I should also add that I’ve had some issues with some of Qt5’s OpenGL-functions, which is why the draw-call uses OpenGL.GL functions, and I’ve had issues with null pointers which is why I have resorted to VoidPtr() (despite having read that None works for others, which confuses me a little).

Any and all help appreciated.