message: Add extra check to not try to delete shader/program 0. Closes
  * The GL spec says that this is clearly allowed, but some buggy Android drivers
  throw warnings or errors so we can add this harmless check on shutdown.
diff: @@ -1070,7 +1070,7 @@ void GLReplay::DeleteDebugData()
  MakeCurrentReplayContext(&m_ReplayCtx);
  - if(DebugData.overlayProg != 0)
  + if(DebugData.overlayProg)
  drv.glDeleteProgram(DebugData.overlayProg);
  drv.glDeleteTransformFeedbacks(1, &DebugData.feedbackObj);
  @@ -1084,22 +1084,30 @@ void GLReplay::DeleteDebugData()
  drv.glDeleteFramebuffers(1, &DebugData.overlayFBO);
  drv.glDeleteTextures(1, &DebugData.overlayTex);
  + if(DebugData.quadoverdrawFragShader)
  drv.glDeleteShader(DebugData.quadoverdrawFragShader);
  + if(DebugData.quadoverdrawResolveProg)
  drv.glDeleteProgram(DebugData.quadoverdrawResolveProg);
  + if(DebugData.texDisplayVertexShader)
  drv.glDeleteShader(DebugData.texDisplayVertexShader);
  for(int i = 0; i < 3; i++)
  + if(DebugData.texDisplayProg[i])
  drv.glDeleteProgram(DebugData.texDisplayProg[i]);
  + if(DebugData.checkerProg)
  drv.glDeleteProgram(DebugData.checkerProg);
  if(DebugData.fixedcolFragShader)
  drv.glDeleteShader(DebugData.fixedcolFragShader);
  for(size_t i = 0; i < ARRAY_COUNT(DebugData.meshProg); i++)
  {
  + if(DebugData.meshProg[i])
  drv.glDeleteProgram(DebugData.meshProg[i]);
  + if(DebugData.meshgsProg[i])
  drv.glDeleteProgram(DebugData.meshgsProg[i]);
  }
  + if(DebugData.trisizeProg)
  drv.glDeleteProgram(DebugData.trisizeProg);
  drv.glDeleteBuffers(ARRAY_COUNT(DebugData.UBOs), DebugData.UBOs);
  @@ -1125,23 +1133,30 @@ void GLReplay::DeleteDebugData()
  if(i == 2)
  idx |= TEXDISPLAY_SINT_TEX;
  + if(DebugData.minmaxTileProgram[idx])
  drv.glDeleteProgram(DebugData.minmaxTileProgram[idx]);
  + if(DebugData.histogramProgram[idx])
  drv.glDeleteProgram(DebugData.histogramProgram[idx]);
  + if(DebugData.minmaxResultProgram[i])
  drv.glDeleteProgram(DebugData.minmaxResultProgram[i]);
  - DebugData.minmaxResultProgram[i] = 0;
  }
  }
  + if(DebugData.meshPickProgram)
  drv.glDeleteProgram(DebugData.meshPickProgram);
  drv.glDeleteBuffers(1, &DebugData.pickIBBuf);
  drv.glDeleteBuffers(1, &DebugData.pickVBBuf);
  drv.glDeleteBuffers(1, &DebugData.pickResultBuf);
  + if(DebugData.Array2MS)
  drv.glDeleteProgram(DebugData.Array2MS);
  + if(DebugData.MS2Array)
  drv.glDeleteProgram(DebugData.MS2Array);
  + if(DebugData.DepthArray2MS)
  drv.glDeleteProgram(DebugData.DepthArray2MS);
  + if(DebugData.DepthMS2Array)
  drv.glDeleteProgram(DebugData.DepthMS2Array);
  drv.glDeleteBuffers(1, &DebugData.minmaxTileResult);
  