void begin (RequestOutputStream o, int opcode, int small_params_length,
                int large_param_length) {
      out = o;
      this.large_param_length = large_param_length;
      int length_total = small_params_length + large_param_length;
      int pad = RequestOutputStream.pad (length_total);
      int render_command_length = 4 + length_total + pad; 
      render_large =  2 + render_command_length / 4 > o.buffer.length;
      if (render_large) {
        request_total = large_param_length / (o.buffer.length - 16) + 1;
        pad = RequestOutputStream.pad (small_params_length);
        int l = 6 + (small_params_length + pad) / 4;
        out.begin_request(glx.major_opcode, 2, l);
        out.write_int32 (tag);
        request_number = 1;
        out.write_int16 (request_number);
        out.write_int16 (request_total);
        out.write_int32 (small_params_length);
        out.write_int32 (length_total);
        out.write_int32 (opcode);
        large_param = false;
      } else {
        out.begin_request(glx.major_opcode, 1, 2 + render_command_length / 4);
        out.write_int32 (tag);
        out.write_int16 (render_command_length);
        out.write_int16 (opcode);
      }
    }