Program: 78192
Project: 78192
Buggy source:
@Override public void onSurfaceChanged(GL10 gl,int width,int height){
  mWidth=width;
  mHeight=height;
  mProgramId=GLES20.glCreateProgram();
  String vertexShaderSource=TextResourceReader.readTextFileFromResource(context,R.raw.pano_vertex_shader);
  String fragmentShaderSource=TextResourceReader.readTextFileFromResource(context,R.raw.pano_fragment_shader);
  int vertexShaderId=GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
  GLES20.glShaderSource(vertexShaderId,vertexShaderSource);
  GLES20.glCompileShader(vertexShaderId);
  int fragmentShaderId=GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
  GLES20.glShaderSource(fragmentShaderId,fragmentShaderSource);
  GLES20.glCompileShader(fragmentShaderId);
  glAttachShader(mProgramId,vertexShaderId);
  glAttachShader(mProgramId,fragmentShaderId);
  glLinkProgram(mProgramId);
  mPositionHandle=glGetAttribLocation(mProgramId,"String_Node_Str");
  mTexCoordHandle=glGetAttribLocation(mProgramId,"String_Node_Str");
  mMatrixHandle=glGetUniformLocation(mProgramId,"String_Node_Str");
  mTexSamplerHandle=glGetUniformLocation(mProgramId,"String_Node_Str");
  mTexNames=new int[1];
  glGenTextures(1,mTexNames,0);
  Bitmap bitmap=BitmapFactory.decodeResource(context.getResources(),R.drawable.local_test3);
  glActiveTexture(GLES20.GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D,mTexNames[0]);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  GLUtils.texImage2D(GL_TEXTURE_2D,0,bitmap,0);
  bitmap.recycle();
  float ratio=(float)height / width;
  Matrix.frustumM(mProjectionMatrix,0,-1,1,-ratio,ratio,0.8f,7);
}

Fixed version (ground truth):
@Override public void onSurfaceChanged(GL10 gl,int width,int height){
  mWidth=width;
  mHeight=height;
  mProgramId=GLES20.glCreateProgram();
  String vertexShaderSource=TextResourceReader.readTextFileFromResource(context,R.raw.pano_vertex_shader);
  String fragmentShaderSource=TextResourceReader.readTextFileFromResource(context,R.raw.pano_fragment_shader);
  int vertexShaderId=GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
  glShaderSource(vertexShaderId,vertexShaderSource);
  glCompileShader(vertexShaderId);
  int fragmentShaderId=GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
  glShaderSource(fragmentShaderId,fragmentShaderSource);
  glCompileShader(fragmentShaderId);
  glAttachShader(mProgramId,vertexShaderId);
  glAttachShader(mProgramId,fragmentShaderId);
  glLinkProgram(mProgramId);
  mPositionHandle=glGetAttribLocation(mProgramId,"String_Node_Str");
  mTexCoordHandle=glGetAttribLocation(mProgramId,"String_Node_Str");
  mMatrixHandle=glGetUniformLocation(mProgramId,"String_Node_Str");
  mTexSamplerHandle=glGetUniformLocation(mProgramId,"String_Node_Str");
  mTexNames=new int[1];
  glGenTextures(1,mTexNames,0);
  Bitmap bitmap=BitmapFactory.decodeResource(context.getResources(),R.drawable.local_test3);
  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D,mTexNames[0]);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  GLUtils.texImage2D(GL_TEXTURE_2D,0,bitmap,0);
  bitmap.recycle();
  float ratio=(float)height / width;
  Matrix.frustumM(mProjectionMatrix,0,-1,1,-ratio,ratio,3,7);
}