text: """
  Triangle with Custom Shader
  ---------------------------
  """
  import bpy
  import gpu
  from gpu_extras.batch import batch_for_shader
  
  vertex_shader = '''
      uniform mat4 viewProjectionMatrix;
  
      in vec3 position;
      out vec3 pos;
  
      void main()
      {
          pos = position;
          gl_Position = viewProjectionMatrix * vec4(position, 1.0f);
      }
  '''
  
  fragment_shader = '''
      uniform float brightness;
  
      in vec3 pos;
      out vec4 FragColor;
  
      void main()
      {
          FragColor = vec4(pos * brightness, 1.0);
      }
  '''
  
  coords = [(1, 1, 1), (2, 0, 0), (-2, -1, 3)]
  shader = gpu.types.GPUShader(vertex_shader, fragment_shader)
  batch = batch_for_shader(shader, 'TRIS', {"position": coords})
  
  
  def draw():
      shader.bind()
      matrix = bpy.context.region_data.perspective_matrix
      shader.uniform_float("viewProjectionMatrix", matrix)
      shader.uniform_float("brightness", 0.5)
      batch.draw(shader)
  
  
  bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
  