public static void RenderSubImage(this SimpleRectTextureShader shader, GLBitmap bmp,
                                   float srcLeft, float srcTop,
                                   float srcW, float srcH,
                                   float targetLeft, float targetTop,
                                   float scale = 1)
 {
     //TODO: review float array here,use buffer instead
     unsafe
     {
         float *srcDestList = stackalloc float[6];
         {
             srcDestList[0] = srcLeft;
             srcDestList[1] = srcTop;
             srcDestList[2] = srcW;
             srcDestList[3] = srcH;
             srcDestList[4] = targetLeft;
             srcDestList[5] = targetTop;
         }
         shader.LoadGLBitmap(bmp);
         shader.UnsafeDrawSubImages(srcDestList, 6, scale);
     }
 }
 public static void RenderSubImages(this SimpleRectTextureShader shader, GLBitmap bmp, float[] srcDestList, float scale)
 {
     shader.LoadGLBitmap(bmp);
     shader.DrawSubImages(srcDestList, scale);
 }